makepack-dolibarr.pl 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035
  1. #!/usr/bin/perl
  2. #----------------------------------------------------------------------------
  3. # \file build/makepack-dolibarr.pl
  4. # \brief Dolibarr package builder (tgz, zip, rpm, deb, exe, aps)
  5. # \author (c)2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
  6. #
  7. # This is list of constant you can set to have generated packages moved into a specific dir:
  8. #DESTIBETARC='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/lastbuild'
  9. #DESTISTABLE='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/stable'
  10. #DESTIMODULES='/media/HDDATA1_LD/Mes Sites/Web/Admin1/wwwroot/files/modules'
  11. #DESTIDOLIMEDBETARC='/media/HDDATA1_LD/Mes Sites/Web/DoliCloud/dolimed.com/htdocs/files/lastbuild'
  12. #DESTIDOLIMEDMODULES='/media/HDDATA1_LD/Mes Sites/Web/DoliCloud/dolimed.com/htdocs/files/modules'
  13. #DESTIDOLIMEDSTABLE='/media/HDDATA1_LD/Mes Sites/Web/DoliCloud/dolimed.com/htdocs/files/stable'
  14. #----------------------------------------------------------------------------
  15. use Cwd;
  16. $PROJECT="dolibarr";
  17. $RPMSUBVERSION="auto"; # auto use value found into BUILD
  18. @LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","APS","EXEDOLIWAMP","SNAPSHOT"); # Possible packages
  19. %REQUIREMENTPUBLISH=(
  20. "SF"=>"git ssh rsync"
  21. );
  22. %REQUIREMENTTARGET=( # Tool requirement for each package
  23. "TGZ"=>"tar",
  24. "ZIP"=>"7z",
  25. "XZ"=>"xz",
  26. "RPM_GENERIC"=>"rpmbuild",
  27. "RPM_FEDORA"=>"rpmbuild",
  28. "RPM_MANDRIVA"=>"rpmbuild",
  29. "RPM_OPENSUSE"=>"rpmbuild",
  30. "DEB"=>"dpkg",
  31. "APS"=>"zip",
  32. "EXEDOLIWAMP"=>"ISCC.exe",
  33. "SNAPSHOT"=>"tar"
  34. );
  35. %ALTERNATEPATH=(
  36. "7z"=>"7-ZIP",
  37. "makensis.exe"=>"NSIS"
  38. );
  39. if (-d "/usr/src/redhat") { $RPMDIR="/usr/src/redhat"; } # redhat
  40. if (-d "/usr/src/packages") { $RPMDIR="/usr/src/packages"; } # opensuse
  41. if (-d "/usr/src/RPM") { $RPMDIR="/usr/src/RPM"; } # mandrake
  42. use vars qw/ $REVISION $VERSION /;
  43. $VERSION="3.3";
  44. #------------------------------------------------------------------------------
  45. # MAIN
  46. #------------------------------------------------------------------------------
  47. ($DIR=$0) =~ s/([^\/\\]+)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1;
  48. $DIR||='.'; $DIR =~ s/([^\/\\])[\\\/]+$/$1/;
  49. $SOURCE="$DIR/..";
  50. $DESTI="$SOURCE/build";
  51. $PUBLISH="eldy,dolibarr\@frs.sourceforge.net:/home/frs/project/dolibarr";
  52. if (! $ENV{"DESTIBETARC"} || ! $ENV{"DESTISTABLE"})
  53. {
  54. print "Error: Missing environment variables.\n";
  55. print "You must define the environment variable DESTIBETARC and DESTISTABLE to point to the\ndirectories where you want to save the generated packages.\n";
  56. print "Example: DESTIBETARC='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/lastbuild'\n";
  57. print "Example: DESTISTABLE='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/stable'\n";
  58. print "$PROG.$Extension aborted.\n";
  59. sleep 2;
  60. exit 1;
  61. }
  62. if (! -d $ENV{"DESTIBETARC"} || ! -d $ENV{"DESTISTABLE"})
  63. {
  64. print "Error: Directory of environment variable DESTIBETARC or DESTISTABLE does not exist.\n";
  65. print "$PROG.$Extension aborted.\n";
  66. sleep 2;
  67. exit 1;
  68. }
  69. # Detect OS type
  70. # --------------
  71. if ("$^O" =~ /linux/i || (-d "/etc" && -d "/var" && "$^O" !~ /cygwin/i)) { $OS='linux'; $CR=''; }
  72. elsif (-d "/etc" && -d "/Users") { $OS='macosx'; $CR=''; }
  73. elsif ("$^O" =~ /cygwin/i || "$^O" =~ /win32/i) { $OS='windows'; $CR="\r"; }
  74. if (! $OS) {
  75. print "Error: Can't detect your OS.\n";
  76. print "Can't continue.\n";
  77. print "$PROG.$Extension aborted.\n";
  78. sleep 2;
  79. exit 1;
  80. }
  81. # Define buildroot
  82. # ----------------
  83. if ($OS =~ /linux/) {
  84. $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"/tmp";
  85. }
  86. if ($OS =~ /macos/) {
  87. $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"/tmp";
  88. }
  89. if ($OS =~ /windows/) {
  90. $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"c:/temp";
  91. $PROGPATH=$ENV{"ProgramFiles"};
  92. }
  93. if (! $TEMP || ! -d $TEMP) {
  94. print "Error: A temporary directory can not be find.\n";
  95. print "Check that TEMP or TMP environment variable is set correctly.\n";
  96. print "$PROG.$Extension aborted.\n";
  97. sleep 2;
  98. exit 2;
  99. }
  100. $BUILDROOT="$TEMP/buildroot";
  101. # Get version $MAJOR, $MINOR and $BUILD
  102. $result = open( IN, "<" . $SOURCE . "/htdocs/filefunc.inc.php" );
  103. if ( !$result ) { die "Error: Can't open descriptor file " . $SOURCE . "/htdocs/filefunc.inc.php\n"; }
  104. while (<IN>) {
  105. if ( $_ =~ /define\('DOL_VERSION','([\d\.]+)'\)/ ) { $PROJVERSION = $1; break; }
  106. }
  107. close IN;
  108. ($MAJOR,$MINOR,$BUILD)=split(/\./,$PROJVERSION,3);
  109. if ($MINOR eq '') { die "Error can't detect version into ".$SOURCE . "/htdocs/filefunc.inc.php"; }
  110. # Set vars for packaging
  111. $FILENAME = "$PROJECT";
  112. $FILENAMESNAPSHOT = "$PROJECT-snapshot";
  113. $FILENAMETGZ = "$PROJECT-$MAJOR.$MINOR.$BUILD";
  114. $FILENAMEZIP = "$PROJECT-$MAJOR.$MINOR.$BUILD";
  115. $FILENAMEXZ = "$PROJECT-$MAJOR.$MINOR.$BUILD";
  116. $FILENAMEDEB = "see later";
  117. $FILENAMEAPS = "$PROJECT-$MAJOR.$MINOR.$BUILD.app";
  118. $FILENAMEEXEDOLIWAMP = "DoliWamp-$MAJOR.$MINOR.$BUILD";
  119. # For RPM
  120. $ARCH='noarch';
  121. $newbuild = $BUILD;
  122. $newbuild =~ s/(dev|alpha)/0.1.a/gi; # dev (fedora)
  123. $newbuild =~ s/beta/0.2.beta1/gi; # beta (fedora)
  124. $newbuild =~ s/rc./0.3.rc1/gi; # rc (fedora)
  125. if ($newbuild !~ /-/) { $newbuild.='-0.3'; } # finale (fedora)
  126. #$newbuild =~ s/(dev|alpha)/0/gi; # dev
  127. #$newbuild =~ s/beta/1/gi; # beta
  128. #$newbuild =~ s/rc./2/gi; # rc
  129. #if ($newbuild !~ /-/) { $newbuild.='-3'; } # finale
  130. $REL1 = $newbuild; $REL1 =~ s/-.*$//gi;
  131. if ($RPMSUBVERSION eq 'auto') { $RPMSUBVERSION = $newbuild; $RPMSUBVERSION =~ s/^.*-//gi; }
  132. $FILENAMETGZ2="$PROJECT-$MAJOR.$MINOR.$REL1";
  133. $FILENAMERPM=$FILENAMETGZ2."-".$RPMSUBVERSION.".".$ARCH.".rpm";
  134. # For Deb
  135. $newbuild = $BUILD;
  136. $newbuild =~ s/(dev|alpha)/1/gi; # dev
  137. $newbuild =~ s/beta/2/gi; # beta
  138. $newbuild =~ s/rc./3/gi; # rc
  139. if ($newbuild !~ /-/) { $newbuild.='-3'; } # finale is same than rc.
  140. # now newbuild is 0-1 or 0-3 for example. Note that for native package (see debian/source/format), we should not use a dash part but to get a better version management
  141. $build = $newbuild;
  142. $build =~ s/-.*$//g;
  143. # now build is 0 for example
  144. # $build .= '+nmu1';
  145. # now build is 0+nmu1 for example
  146. $FILENAMEDEBNATIVE="${PROJECT}_${MAJOR}.${MINOR}.${build}";
  147. $FILENAMEDEB="${PROJECT}_${MAJOR}.${MINOR}.${newbuild}";
  148. my $copyalreadydone=0;
  149. my $batch=0;
  150. for (0..@ARGV-1) {
  151. if ($ARGV[$_] =~ /^-*target=(\w+)/i) { $target=$1; $batch=1; }
  152. if ($ARGV[$_] =~ /^-*desti=(.+)/i) { $DESTI=$1; }
  153. if ($ARGV[$_] =~ /^-*prefix=(.+)/i) {
  154. $PREFIX=$1;
  155. $FILENAMESNAPSHOT.="-".$PREFIX;
  156. }
  157. }
  158. if ($ENV{"DESTIBETARC"} && $BUILD =~ /[a-z]/i) { $DESTI = $ENV{"DESTIBETARC"}; } # Force output dir if env DESTIBETARC is defined
  159. if ($ENV{"DESTISTABLE"} && $BUILD =~ /^[0-9]+$/) { $DESTI = $ENV{"DESTISTABLE"}; } # Force output dir if env DESTISTABLE is defined
  160. if ($ENV{"PUBLISHBETARC"} && $BUILD =~ /[a-z]/i) { $PUBLISH = $ENV{"PUBLISHBETARC"}; } # Force target site for publishing if env PUBLISHBETARC is defined
  161. if ($ENV{"PUBLISHSTABLE"} && $BUILD =~ /^[0-9]+$/) { $PUBLISH = $ENV{"PUBLISHSTABLE"}; } # Force target site for publishing if env PUBLISHSTABLE is defined
  162. print "Makepack version $VERSION\n";
  163. print "Building/publishing package name: $PROJECT\n";
  164. print "Building/publishing package version: $MAJOR.$MINOR.$BUILD\n";
  165. print "Source directory (SOURCE): $SOURCE\n";
  166. print "Target directory (DESTI) : $DESTI\n";
  167. print "Publishing target (PUBLISH): $PUBLISH\n";
  168. # Choose package targets
  169. #-----------------------
  170. if ($target) {
  171. if ($target eq "ALL") {
  172. foreach my $key (@LISTETARGET) {
  173. if ($key ne 'SNAPSHOT' && $key ne 'SF') { $CHOOSEDTARGET{$key}=1; }
  174. }
  175. }
  176. if ($target ne "ALL" && $target ne "SF") { $CHOOSEDTARGET{uc($target)}=1; }
  177. if ($target eq "SF") { $CHOOSEDPUBLISH{"SF"}=1; }
  178. }
  179. else {
  180. my $found=0;
  181. my $NUM_SCRIPT;
  182. my $cpt=0;
  183. while (! $found) {
  184. printf(" %2d - %-12s (%s)\n",$cpt,"ALL (1..9)","Need ".join(",",values %REQUIREMENTTARGET));
  185. foreach my $target (@LISTETARGET) {
  186. $cpt++;
  187. printf(" %2d - %-12s (%s)\n",$cpt,$target,"Need ".$REQUIREMENTTARGET{$target});
  188. }
  189. $cpt=99;
  190. printf(" %2d - %-12s (%s)\n",$cpt,"SF (publish)","Need ".join(",",values %REQUIREMENTPUBLISH));
  191. # Ask which target to build
  192. print "Choose one package number or several separated with space (0 - ".$cpt."): ";
  193. $NUM_SCRIPT=<STDIN>;
  194. chomp($NUM_SCRIPT);
  195. if ($NUM_SCRIPT !~ /^[0-9\s]+$/)
  196. {
  197. print "This is not a valid package number list.\n";
  198. $found = 0;
  199. }
  200. else
  201. {
  202. $found = 1;
  203. }
  204. }
  205. print "\n";
  206. if ($NUM_SCRIPT eq "99") {
  207. $CHOOSEDPUBLISH{"SF"}=1;
  208. }
  209. else {
  210. if ($NUM_SCRIPT eq "0") {
  211. foreach my $key (@LISTETARGET) {
  212. if ($key ne 'SNAPSHOT' && $key ne 'SF') { $CHOOSEDTARGET{$key}=1; }
  213. }
  214. }
  215. else {
  216. foreach my $num (split(/\s+/,$NUM_SCRIPT)) {
  217. $CHOOSEDTARGET{$LISTETARGET[$num-1]}=1;
  218. }
  219. }
  220. }
  221. }
  222. # Test if requirement is ok
  223. #--------------------------
  224. $atleastonerpm=0;
  225. foreach my $target (keys %CHOOSEDTARGET) {
  226. if ($target =~ /RPM/i)
  227. {
  228. if ($atleastonerpm && ($DESTI eq "$SOURCE/build"))
  229. {
  230. print "Error: You asked creation of several rpms. Because all rpm have same name, you must defined an environment variable DESTI to tell packager where it can create subdirs for each generated package.\n";
  231. exit;
  232. }
  233. $atleastonerpm=1;
  234. }
  235. foreach my $req (split(/[,\s]/,$REQUIREMENTTARGET{$target}))
  236. {
  237. # Test
  238. print "Test requirement for target $target: Search '$req'... ";
  239. $newreq=$req; $newparam='';
  240. if ($newreq eq 'zip') { $newparam.='-h'; }
  241. if ($newreq eq 'xz') { $newparam.='-h'; }
  242. $cmd="\"$newreq\" $newparam 2>&1";
  243. print "Test command ".$cmd."... ";
  244. $ret=`$cmd`;
  245. $coderetour=$?; $coderetour2=$coderetour>>8;
  246. if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/)) && $PROGPATH) {
  247. # Not found error, we try in PROGPATH
  248. $ret=`"$PROGPATH/$ALTERNATEPATH{$req}/$req\" 2>&1`;
  249. $coderetour=$?; $coderetour2=$coderetour>>8;
  250. $REQUIREMENTTARGET{$target}="$PROGPATH/$ALTERNATEPATH{$req}/$req";
  251. }
  252. if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/))) {
  253. # Not found error
  254. print "Not found\nCan't build target $target. Requirement '$req' not found in PATH\n";
  255. $CHOOSEDTARGET{$target}=-1;
  256. last;
  257. } else {
  258. # Pas erreur ou erreur autre que programme absent
  259. print " Found ".$req."\n";
  260. }
  261. }
  262. }
  263. print "\n";
  264. # Check if there is at least on target to build
  265. #----------------------------------------------
  266. $nboftargetok=0;
  267. $nboftargetneedbuildroot=0;
  268. $nbofpublishneedtag=0;
  269. foreach my $target (keys %CHOOSEDTARGET) {
  270. if ($CHOOSEDTARGET{$target} < 0) { next; }
  271. if ($target ne 'EXE' && $target ne 'EXEDOLIWAMP')
  272. {
  273. $nboftargetneedbuildroot++;
  274. }
  275. $nboftargetok++;
  276. }
  277. foreach my $target (keys %CHOOSEDPUBLISH) {
  278. if ($CHOOSEDPUBLISH{$target} < 0) { next; }
  279. if ($target eq 'SF')
  280. {
  281. $nbofpublishneedtag++;
  282. }
  283. $nboftargetok++;
  284. }
  285. if ($nboftargetok) {
  286. # Update CVS if required
  287. #-----------------------
  288. if ($nbofpublishneedtag)
  289. {
  290. print "Go to directory $SOURCE\n";
  291. $olddir=getcwd();
  292. chdir("$SOURCE");
  293. print 'Run git tag -a -m "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'" "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'"'."\n";
  294. $ret=`git tag -a -m "$MAJOR.$MINOR.$BUILD" "$MAJOR.$MINOR.$BUILD" 2>&1`;
  295. if ($ret =~ /already exists/)
  296. {
  297. print "WARNING: Tag ".$MAJOR.'.'.$MINOR.'.'.$BUILD." already exists. Overwrite (y/N) ? ";
  298. $QUESTIONOVERWRITETAG=<STDIN>;
  299. chomp($QUESTIONOVERWRITETAG);
  300. if ($QUESTIONOVERWRITETAG =~ /(o|y)/)
  301. {
  302. print 'Run git tag -a -f -m "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'" "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'"'."\n";
  303. $ret=`git tag -a -f -m "$MAJOR.$MINOR.$BUILD" "$MAJOR.$MINOR.$BUILD"`;
  304. }
  305. }
  306. print 'Run git push --tags'."\n";
  307. $ret=`git push --tags`;
  308. chdir("$olddir");
  309. }
  310. # Update buildroot if required
  311. #-----------------------------
  312. if ($nboftargetneedbuildroot)
  313. {
  314. if (! $copyalreadydone) {
  315. print "Creation of a buildroot used for all packages\n";
  316. print "Delete directory $BUILDROOT\n";
  317. $ret=`rm -fr "$BUILDROOT"`;
  318. mkdir "$BUILDROOT";
  319. mkdir "$BUILDROOT/$PROJECT";
  320. print "Copy $SOURCE into $BUILDROOT/$PROJECT\n";
  321. $ret=`cp -pr "$SOURCE" "$BUILDROOT/$PROJECT"`;
  322. print "Copy $SOURCE/build/debian/apache/.htaccess into $BUILDROOT/$PROJECT/build/debian/apache/.htaccess\n";
  323. $ret=`cp -pr "$SOURCE/build/debian/apache/.htaccess" "$BUILDROOT/$PROJECT/build/debian/apache/.htaccess"`;
  324. }
  325. print "Clean $BUILDROOT\n";
  326. $ret=`rm -f $BUILDROOT/$PROJECT/.buildpath`;
  327. $ret=`rm -fr $BUILDROOT/$PROJECT/.cache`;
  328. $ret=`rm -fr $BUILDROOT/$PROJECT/.externalToolBuilders`;
  329. $ret=`rm -fr $BUILDROOT/$PROJECT/.git`;
  330. $ret=`rm -f $BUILDROOT/$PROJECT/.gitmodules`;
  331. $ret=`rm -f $BUILDROOT/$PROJECT/.gitignore`;
  332. $ret=`rm -fr $BUILDROOT/$PROJECT/.project`;
  333. $ret=`rm -fr $BUILDROOT/$PROJECT/.settings`;
  334. $ret=`rm -fr $BUILDROOT/$PROJECT/.travis.yml`;
  335. $ret=`rm -fr $BUILDROOT/$PROJECT/.tx`;
  336. $ret=`rm -f $BUILDROOT/$PROJECT/build.xml`;
  337. $ret=`rm -f $BUILDROOT/$PROJECT/quickbuild.xml`;
  338. $ret=`rm -f $BUILDROOT/$PROJECT/pom.xml`;
  339. $ret=`rm -f $BUILDROOT/$PROJECT/README.md`;
  340. $ret=`rm -fr $BUILDROOT/$PROJECT/build/html`;
  341. $ret=`rm -f $BUILDROOT/$PROJECT/build/Doli*-*`;
  342. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr_*.deb`;
  343. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr_*.dsc`;
  344. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr_*.tar.gz`;
  345. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.deb`;
  346. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.rpm`;
  347. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.tar`;
  348. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.tar.gz`;
  349. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.tgz`;
  350. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.xz`;
  351. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.zip`;
  352. $ret=`rm -f $BUILDROOT/$PROJECT/build/doxygen/doxygen_warnings.log`;
  353. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/cache.manifest`;
  354. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php`;
  355. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.mysql`;
  356. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.old`;
  357. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.postgres`;
  358. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf*sav*`;
  359. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/install/mssql/README`;
  360. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/install/mysql/README`;
  361. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/install/pgsql/README`;
  362. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/install/mssql`;
  363. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/codesniffer`;
  364. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/codetemplates`;
  365. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/dbmodel`;
  366. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/initdata`;
  367. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/iso-normes`;
  368. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/ldap`;
  369. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/licence`;
  370. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/mail`;
  371. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/phpcheckstyle`;
  372. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/phpunit`;
  373. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/security`;
  374. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/spec`;
  375. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/test`;
  376. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/uml`;
  377. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/xdebug`;
  378. $ret=`rm -f $BUILDROOT/$PROJECT/dev/dolibarr_changes.txt`;
  379. $ret=`rm -f $BUILDROOT/$PROJECT/dev/README`;
  380. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot2.png`;
  381. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot3.png`;
  382. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot4.png`;
  383. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot5.png`;
  384. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot6.png`;
  385. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot7.png`;
  386. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot8.png`;
  387. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot9.png`;
  388. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot10.png`;
  389. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot11.png`;
  390. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot12.png`;
  391. $ret=`rm -fr $BUILDROOT/$PROJECT/document`;
  392. $ret=`rm -fr $BUILDROOT/$PROJECT/documents`;
  393. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/document`;
  394. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/documents`;
  395. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/bootstrap*`;
  396. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/custom*`;
  397. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/multicompany*`;
  398. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/nltechno*`;
  399. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/pos*`;
  400. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/public/test`;
  401. $ret=`rm -fr $BUILDROOT/$PROJECT/test`;
  402. $ret=`rm -fr $BUILDROOT/$PROJECT/Thumbs.db $BUILDROOT/$PROJECT/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/*/Thumbs.db`;
  403. $ret=`rm -f $BUILDROOT/$PROJECT/.cvsignore $BUILDROOT/$PROJECT/*/.cvsignore $BUILDROOT/$PROJECT/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/*/.cvsignore`;
  404. $ret=`rm -f $BUILDROOT/$PROJECT/.gitignore $BUILDROOT/$PROJECT/*/.gitignore $BUILDROOT/$PROJECT/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/*/*/.gitignore`;
  405. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/geoip/sample*.*`;
  406. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/jqueryFileTree/connectors/jqueryFileTree.pl`; # Avoid errors into rpmlint
  407. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/template`; # Package not valid for most linux distributions (errors reported into compile.js). Package should be embed by modules to avoid problems.
  408. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpmailer`; # Package not valid for most linux distributions (errors reported into file LICENSE). Package should be embed by modules to avoid problems.
  409. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/adapters`; # Keep this removal in case we embed libraries
  410. #$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/_source`; # _source must be kept into tarball
  411. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/multiselect/MIT-LICENSE.txt`;
  412. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nusoap/lib/Mail`;
  413. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nusoap/samples`;
  414. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpexcel/license.txt`;
  415. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpexcel/PHPExcel/Shared/PDF`;
  416. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpexcel/PHPExcel/Shared/PCLZip`;
  417. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/dejavu-fonts-ttf-2.33`;
  418. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/freefont-20100919`;
  419. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/utils`;
  420. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/LICENSE.TXT`;
  421. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/savant`;
  422. }
  423. # Build package for each target
  424. #------------------------------
  425. foreach my $target (keys %CHOOSEDTARGET)
  426. {
  427. if ($CHOOSEDTARGET{$target} < 0) { next; }
  428. print "\nBuild package for target $target\n";
  429. if ($target eq 'SNAPSHOT')
  430. {
  431. $NEWDESTI=$DESTI;
  432. print "Remove target $FILENAMESNAPSHOT.tgz...\n";
  433. unlink("$NEWDESTI/$FILENAMESNAPSHOT.tgz");
  434. #rmdir "$BUILDROOT/$FILENAMESNAPSHOT";
  435. $ret=`rm -fr $BUILDROOT/$FILENAMESNAPSHOT`;
  436. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMESNAPSHOT\n";
  437. $cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$FILENAMESNAPSHOT\"";
  438. $ret=`$cmd`;
  439. print "Compress $BUILDROOT into $FILENAMESNAPSHOT.tgz...\n";
  440. $cmd="tar --exclude doli*.tgz --exclude doli*.deb --exclude doli*.exe --exclude doli*.xz --exclude doli*.zip --exclude doli*.rpm --exclude .cache --exclude .settings --exclude conf.php --exclude conf.php.mysql --exclude conf.php.old --exclude conf.php.postgres --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$FILENAMESNAPSHOT.tgz\" $FILENAMESNAPSHOT";
  441. print $cmd."\n";
  442. $ret=`$cmd`;
  443. # Move to final dir
  444. print "Move $FILENAMESNAPSHOT.tgz to $NEWDESTI/$FILENAMESNAPSHOT.tgz\n";
  445. $ret=`mv "$FILENAMESNAPSHOT.tgz" "$NEWDESTI/$FILENAMESNAPSHOT.tgz"`;
  446. next;
  447. }
  448. if ($target eq 'TGZ')
  449. {
  450. $NEWDESTI=$DESTI;
  451. mkdir($DESTI.'/standard');
  452. if (-d $DESTI.'/standard') { $NEWDESTI=$DESTI.'/standard'; }
  453. print "Remove target $FILENAMETGZ.tgz...\n";
  454. unlink("$NEWDESTI/$FILENAMETGZ.tgz");
  455. #rmdir "$BUILDROOT/$FILENAMETGZ";
  456. $ret=`rm -fr $BUILDROOT/$FILENAMETGZ`;
  457. print "Copy $BUILDROOT/$PROJECT/ to $BUILDROOT/$FILENAMETGZ\n";
  458. $cmd="cp -pr \"$BUILDROOT/$PROJECT/\" \"$BUILDROOT/$FILENAMETGZ\"";
  459. $ret=`$cmd`;
  460. $ret=`rm -fr $BUILDROOT/$FILENAMETGZ/build/exe`;
  461. $ret=`rm -fr $BUILDROOT/$FILENAMETGZ/htdocs/includes/ckeditor/_source`; # We can't remove it with exclude file, we need it for some tarball packages
  462. print "Compress $FILENAMETGZ into $FILENAMETGZ.tgz...\n";
  463. $cmd="tar --exclude-vcs --exclude-from \"$BUILDROOT/$PROJECT/build/tgz/tar_exclude.txt\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$FILENAMETGZ.tgz\" $FILENAMETGZ";
  464. $ret=`$cmd`;
  465. # Move to final dir
  466. print "Move $FILENAMETGZ.tgz to $NEWDESTI/$FILENAMETGZ.tgz\n";
  467. $ret=`mv "$FILENAMETGZ.tgz" "$NEWDESTI/$FILENAMETGZ.tgz"`;
  468. next;
  469. }
  470. if ($target eq 'XZ')
  471. {
  472. $NEWDESTI=$DESTI;
  473. mkdir($DESTI.'/standard');
  474. if (-d $DESTI.'/standard') { $NEWDESTI=$DESTI.'/standard'; }
  475. print "Remove target $FILENAMEXZ.xz...\n";
  476. unlink("$NEWDESTI/$FILENAMEXZ.xz");
  477. #rmdir "$BUILDROOT/$FILENAMEXZ";
  478. $ret=`rm -fr $BUILDROOT/$FILENAMEXZ`;
  479. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMEXZ\n";
  480. $cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$FILENAMEXZ\"";
  481. $ret=`$cmd`;
  482. $ret=`rm -fr $BUILDROOT/$FILENAMEXZ/build/exe`;
  483. $ret=`rm -fr $BUILDROOT/$FILENAMEXZ/htdocs/includes/ckeditor/_source`; # We can't remove it with exclude file, we need it for some tarball packages
  484. print "Compress $FILENAMEXZ into $FILENAMEXZ.xz...\n";
  485. print "Go to directory $BUILDROOT\n";
  486. $olddir=getcwd();
  487. chdir("$BUILDROOT");
  488. $cmd= "xz -9 -r $BUILDROOT/$FILENAMEAPS.xz \*";
  489. print $cmd."\n";
  490. $ret= `$cmd`;
  491. chdir("$olddir");
  492. # Move to final dir
  493. print "Move $FILENAMEXZ.xz to $NEWDESTI/$FILENAMEXZ.xz\n";
  494. $ret=`mv "$BUILDROOT/$FILENAMEXZ.xz" "$NEWDESTI/$FILENAMEXZ.xz"`;
  495. next;
  496. }
  497. if ($target eq 'ZIP')
  498. {
  499. $NEWDESTI=$DESTI;
  500. mkdir($DESTI.'/standard');
  501. if (-d $DESTI.'/standard') { $NEWDESTI=$DESTI.'/standard'; }
  502. print "Remove target $FILENAMEZIP.zip...\n";
  503. unlink("$NEWDESTI/$FILENAMEZIP.zip");
  504. #rmdir "$BUILDROOT/$FILENAMEZIP";
  505. $ret=`rm -fr $BUILDROOT/$FILENAMEZIP`;
  506. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMEZIP\n";
  507. $cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$FILENAMEZIP\"";
  508. $ret=`$cmd`;
  509. $ret=`rm -fr $BUILDROOT/$FILENAMEZIP/build/exe`;
  510. $ret=`rm -fr $BUILDROOT/$FILENAMEZIP/htdocs/includes/ckeditor/_source`; # We can't remove it with exclude file, we need it for some tarball packages
  511. print "Compress $FILENAMEZIP into $FILENAMEZIP.zip...\n";
  512. print "Go to directory $BUILDROOT\n";
  513. $olddir=getcwd();
  514. chdir("$BUILDROOT");
  515. $cmd= "7z a -r -tzip -xr\@\"$BUILDROOT\/$FILENAMEZIP\/build\/zip\/zip_exclude.txt\" -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMEZIP\/*";
  516. print $cmd."\n";
  517. $ret= `$cmd`;
  518. chdir("$olddir");
  519. # Move to final dir
  520. print "Move $FILENAMEZIP.zip to $NEWDESTI/$FILENAMEZIP.zip\n";
  521. $ret=`mv "$BUILDROOT/$FILENAMEZIP.zip" "$NEWDESTI/$FILENAMEZIP.zip"`;
  522. next;
  523. }
  524. if ($target =~ /RPM/) # Linux only
  525. {
  526. $NEWDESTI=$DESTI;
  527. $subdir="package_rpm_generic";
  528. if ($target =~ /FEDO/i) { $subdir="package_rpm_redhat-fedora"; }
  529. if ($target =~ /MAND/i) { $subdir="package_rpm_mandriva"; }
  530. if ($target =~ /OPEN/i) { $subdir="package_rpm_opensuse"; }
  531. mkdir($DESTI.'/'.$subdir);
  532. if (-d $DESTI.'/'.$subdir) { $NEWDESTI=$DESTI.'/'.$subdir; }
  533. if ($RPMDIR eq "") { $RPMDIR=$ENV{'HOME'}."/rpmbuild"; }
  534. print "Version is $MAJOR.$MINOR.$REL1-$RPMSUBVERSION\n";
  535. #print "Create directory $RPMDIR\n";
  536. #$ret=`mkdir -p "$RPMDIR"`;
  537. print "Remove target ".$FILENAMERPM."...\n";
  538. unlink("$NEWDESTI/".$FILENAMERPM);
  539. print "Remove target ".$FILENAMETGZ2."-".$RPMSUBVERSION.".src.rpm...\n";
  540. unlink("$NEWDESTI/".$FILENAMETGZ2."-".$RPMSUBVERSION.".src.rpm");
  541. print "Create directory $BUILDROOT/$FILENAMETGZ2\n";
  542. $ret=`rm -fr $BUILDROOT/$FILENAMETGZ2`;
  543. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMETGZ2\n";
  544. $cmd="cp -pr '$BUILDROOT/$PROJECT' '$BUILDROOT/$FILENAMETGZ2'";
  545. $ret=`$cmd`;
  546. # Set owners
  547. #print "Set owners on files/dir\n";
  548. #$ret=`chown -R root.root $BUILDROOT/$FILENAMETGZ2`;
  549. print "Set permissions on files/dir\n";
  550. $ret=`chmod -R 755 $BUILDROOT/$FILENAMETGZ2`;
  551. $cmd="find $BUILDROOT/$FILENAMETGZ2 -type f -exec chmod 644 {} \\; ";
  552. $ret=`$cmd`;
  553. # Build tgz
  554. print "Compress $FILENAMETGZ2 into $FILENAMETGZ2.tgz...\n";
  555. $ret=`tar --exclude-from "$SOURCE/build/tgz/tar_exclude.txt" --directory "$BUILDROOT" -czvf "$BUILDROOT/$FILENAMETGZ2.tgz" $FILENAMETGZ2`;
  556. print "Move $BUILDROOT/$FILENAMETGZ2.tgz to $RPMDIR/SOURCES/$FILENAMETGZ2.tgz\n";
  557. $cmd="mv $BUILDROOT/$FILENAMETGZ2.tgz $RPMDIR/SOURCES/$FILENAMETGZ2.tgz";
  558. $ret=`$cmd`;
  559. $BUILDFIC="${FILENAME}.spec";
  560. $BUILDFICSRC="${FILENAME}_generic.spec";
  561. if ($target =~ /FEDO/i) { $BUILDFICSRC="${FILENAME}_fedora.spec"; }
  562. if ($target =~ /MAND/i) { $BUILDFICSRC="${FILENAME}_mandriva.spec"; }
  563. if ($target =~ /OPEN/i) { $BUILDFICSRC="${FILENAME}_opensuse.spec"; }
  564. print "Generate file $BUILDROOT/$BUILDFIC from $SOURCE/build/rpm/${BUILDFICSRC}\n";
  565. open (SPECFROM,"<$SOURCE/build/rpm/${BUILDFICSRC}") || die "Error";
  566. open (SPECTO,">$BUILDROOT/$BUILDFIC") || die "Error";
  567. while (<SPECFROM>) {
  568. $_ =~ s/__FILENAMETGZ__/$FILENAMETGZ/;
  569. $_ =~ s/__VERSION__/$MAJOR.$MINOR.$REL1/;
  570. $_ =~ s/__RELEASE__/$RPMSUBVERSION/;
  571. print SPECTO $_;
  572. }
  573. close SPECFROM;
  574. close SPECTO;
  575. print "Copy patch file to $RPMDIR/SOURCES\n";
  576. $ret=`cp "$SOURCE/build/rpm/dolibarr-forrpm.patch" "$RPMDIR/SOURCES"`;
  577. $ret=`chmod 644 $RPMDIR/SOURCES/dolibarr-forrpm.patch`;
  578. print "Launch RPM build (rpmbuild --clean -ba $BUILDROOT/${BUILDFIC})\n";
  579. #$ret=`rpmbuild -vvvv --clean -ba $BUILDROOT/${BUILDFIC}`;
  580. $ret=`rpmbuild --clean -ba $BUILDROOT/${BUILDFIC}`;
  581. # Move to final dir
  582. print "Move $RPMDIR/RPMS/".$ARCH."/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.".$ARCH.".rpm into $NEWDESTI/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.".$ARCH.".rpm\n";
  583. $cmd="mv $RPMDIR/RPMS/".$ARCH."/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.".$ARCH.".rpm \"$NEWDESTI/\"";
  584. $ret=`$cmd`;
  585. print "Move $RPMDIR/SRPMS/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.src.rpm into $NEWDESTI/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.src.rpm\n";
  586. $cmd="mv $RPMDIR/SRPMS/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.src.rpm \"$NEWDESTI/\"";
  587. $ret=`$cmd`;
  588. print "Move $RPMDIR/SOURCES/".$FILENAMETGZ2.".tgz into $NEWDESTI/".$FILENAMETGZ2.".tgz\n";
  589. $cmd="mv \"$RPMDIR/SOURCES/".$FILENAMETGZ2.".tgz\" \"$NEWDESTI/".$FILENAMETGZ2.".tgz\"";
  590. $ret=`$cmd`;
  591. next;
  592. }
  593. if ($target eq 'DEB')
  594. {
  595. $NEWDESTI=$DESTI;
  596. mkdir($DESTI.'/package_debian-ubuntu');
  597. if (-d $DESTI.'/package_debian-ubuntu') { $NEWDESTI=$DESTI.'/package_debian-ubuntu'; }
  598. $olddir=getcwd();
  599. print "Remove target ${FILENAMEDEB}_all.deb...\n";
  600. unlink("$NEWDESTI/${FILENAMEDEB}_all.deb");
  601. print "Remove target ${FILENAMEDEB}.dsc...\n";
  602. unlink("$NEWDESTI/${FILENAMEDEB}.dsc");
  603. print "Remove target ${FILENAMEDEB}.tar.gz...\n";
  604. unlink("$NEWDESTI/${FILENAMEDEB}.tar.gz");
  605. print "Remove target ${FILENAMEDEB}.changes...\n";
  606. unlink("$NEWDESTI/${FILENAMEDEB}.changes");
  607. print "Remove target ${FILENAMEDEBNATIVE}.orig.tar.gz...\n";
  608. unlink("$NEWDESTI/${FILENAMEDEBNATIVE}.orig.tar.gz");
  609. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp`;
  610. $ret=`rm -fr $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build`;
  611. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$PROJECT.tmp\n";
  612. $cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$PROJECT.tmp\"";
  613. $ret=`$cmd`;
  614. $cmd="cp -pr \"$BUILDROOT/$PROJECT/build/debian/apache/.htaccess\" \"$BUILDROOT/$PROJECT.tmp/build/debian/apache/.htaccess\"";
  615. $ret=`$cmd`;
  616. print "Remove other files\n";
  617. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/README-FR`;
  618. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/README`;
  619. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/README-FR`;
  620. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/aps`;
  621. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/dmg`;
  622. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/pad/README`;
  623. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/tgz/README`;
  624. #$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/debian`;
  625. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/debian/po`;
  626. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/debian/source`;
  627. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/changelog`;
  628. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/compat`;
  629. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/control*`;
  630. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/copyright`;
  631. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.config`;
  632. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.desktop`;
  633. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.doc-base`;
  634. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.install`;
  635. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.lintian-overrides`;
  636. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.postrm`;
  637. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.postinst`;
  638. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.templates`;
  639. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.templates.futur`;
  640. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/rules`;
  641. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/README.howto`;
  642. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/watch`;
  643. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/doap`;
  644. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/exe`;
  645. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/launchpad`;
  646. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/live`;
  647. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/patch`;
  648. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/perl`;
  649. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/rpm`;
  650. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/zip`;
  651. # Rename upstream changelog to match debian rules
  652. $ret=`mv $BUILDROOT/$PROJECT.tmp/ChangeLog $BUILDROOT/$PROJECT.tmp/changelog`;
  653. # Prepare source package (init debian dir)
  654. print "Create directory $BUILDROOT/$PROJECT.tmp/debian\n";
  655. $ret=`mkdir "$BUILDROOT/$PROJECT.tmp/debian"`;
  656. print "Copy $SOURCE/build/debian/xxx to $BUILDROOT/$PROJECT.tmp/debian\n";
  657. # Add files for dpkg-source
  658. $ret=`cp -f "$SOURCE/build/debian/changelog" "$BUILDROOT/$PROJECT.tmp/debian"`;
  659. $ret=`cp -f "$SOURCE/build/debian/compat" "$BUILDROOT/$PROJECT.tmp/debian"`;
  660. $ret=`cp -f "$SOURCE/build/debian/control" "$BUILDROOT/$PROJECT.tmp/debian"`;
  661. $ret=`cp -f "$SOURCE/build/debian/copyright" "$BUILDROOT/$PROJECT.tmp/debian"`;
  662. $ret=`cp -f "$SOURCE/build/debian/dolibarr.desktop" "$BUILDROOT/$PROJECT.tmp/debian"`;
  663. $ret=`cp -f "$SOURCE/build/debian/dolibarr.doc-base" "$BUILDROOT/$PROJECT.tmp/debian"`;
  664. $ret=`cp -f "$SOURCE/build/debian/dolibarr.install" "$BUILDROOT/$PROJECT.tmp/debian"`;
  665. $ret=`cp -f "$SOURCE/build/debian/dolibarr.lintian-overrides" "$BUILDROOT/$PROJECT.tmp/debian"`;
  666. $ret=`cp -f "$SOURCE/build/debian/dolibarr.xpm" "$BUILDROOT/$PROJECT.tmp/debian"`;
  667. $ret=`cp -f "$SOURCE/build/debian/README.source" "$BUILDROOT/$PROJECT.tmp/debian"`;
  668. $ret=`cp -f "$SOURCE/build/debian/rules" "$BUILDROOT/$PROJECT.tmp/debian"`;
  669. $ret=`cp -f "$SOURCE/build/debian/watch" "$BUILDROOT/$PROJECT.tmp/debian"`;
  670. $ret=`cp -fr "$SOURCE/build/debian/patches" "$BUILDROOT/$PROJECT.tmp/debian"`;
  671. $ret=`cp -fr "$SOURCE/build/debian/po" "$BUILDROOT/$PROJECT.tmp/debian"`;
  672. $ret=`cp -fr "$SOURCE/build/debian/source" "$BUILDROOT/$PROJECT.tmp/debian"`;
  673. $ret=`cp -fr "$SOURCE/build/debian/apache" "$BUILDROOT/$PROJECT.tmp/debian/apache"`;
  674. $ret=`cp -f "$SOURCE/build/debian/apache/.htaccess" "$BUILDROOT/$PROJECT.tmp/debian/apache"`;
  675. $ret=`cp -fr "$SOURCE/build/debian/lighttpd" "$BUILDROOT/$PROJECT.tmp/debian/lighttpd"`;
  676. # Add files also required to build binary package
  677. $ret=`cp -f "$SOURCE/build/debian/dolibarr.config" "$BUILDROOT/$PROJECT.tmp/debian"`;
  678. $ret=`cp -f "$SOURCE/build/debian/dolibarr.postinst" "$BUILDROOT/$PROJECT.tmp/debian"`;
  679. $ret=`cp -f "$SOURCE/build/debian/dolibarr.postrm" "$BUILDROOT/$PROJECT.tmp/debian"`;
  680. $ret=`cp -f "$SOURCE/build/debian/dolibarr.templates" "$BUILDROOT/$PROJECT.tmp/debian"`;
  681. $ret=`cp -f "$SOURCE/build/debian/install.forced.php.install" "$BUILDROOT/$PROJECT.tmp/debian"`;
  682. # Set owners and permissions
  683. #print "Set owners on files/dir\n";
  684. #$ret=`chown -R root.root $BUILDROOT/$PROJECT.tmp`;
  685. print "Set permissions on files/dir\n";
  686. $ret=`chmod -R 755 $BUILDROOT/$PROJECT.tmp`;
  687. $cmd="find $BUILDROOT/$PROJECT.tmp -type f -exec chmod 644 {} \\; ";
  688. $ret=`$cmd`;
  689. $cmd="find $BUILDROOT/$PROJECT.tmp/build -name '*.php' -type f -exec chmod 755 {} \\; ";
  690. $ret=`$cmd`;
  691. $cmd="find $BUILDROOT/$PROJECT.tmp/build -name '*.dpatch' -type f -exec chmod 755 {} \\; ";
  692. $ret=`$cmd`;
  693. $cmd="find $BUILDROOT/$PROJECT.tmp/build -name '*.pl' -type f -exec chmod 755 {} \\; ";
  694. $ret=`$cmd`;
  695. $cmd="find $BUILDROOT/$PROJECT.tmp/dev -name '*.php' -type f -exec chmod 755 {} \\; ";
  696. $ret=`$cmd`;
  697. $ret=`chmod 755 $BUILDROOT/$PROJECT.tmp/debian/rules`;
  698. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/translation/autotranslator.class.php`;
  699. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/skeletons/modMyModule.class.php`;
  700. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/skeletons/skeleton_class.class.php`;
  701. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/skeletons/skeleton_page.php`;
  702. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/skeletons/skeleton_webservice_server.php`;
  703. $cmd="find $BUILDROOT/$PROJECT.tmp/scripts -name '*.php' -type f -exec chmod 755 {} \\; ";
  704. $ret=`$cmd`;
  705. $cmd="find $BUILDROOT/$PROJECT.tmp/scripts -name '*.sh' -type f -exec chmod 755 {} \\; ";
  706. $ret=`$cmd`;
  707. print "Rename directory $BUILDROOT/$PROJECT.tmp into $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build\n";
  708. $cmd="mv $BUILDROOT/$PROJECT.tmp $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build";
  709. $ret=`$cmd`;
  710. print "Go into directory $BUILDROOT\n";
  711. chdir("$BUILDROOT");
  712. # We need a tarball to be able to build "quilt" debian package (not required for native but we need patch so it is not a native)
  713. print "Compress $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build into $BUILDROOT/$FILENAMEDEBNATIVE.orig.tar.gz...\n";
  714. $cmd="tar --exclude-vcs --exclude-from \"$BUILDROOT/$PROJECT/build/tgz/tar_exclude.txt\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$BUILDROOT/$FILENAMEDEBNATIVE.orig.tar.gz\" $PROJECT-$MAJOR.$MINOR.$build";
  715. print $cmd."\n";
  716. $ret=`$cmd`;
  717. # Creation of source package
  718. print "Go into directory $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build\n";
  719. chdir("$BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build");
  720. #$cmd="dpkg-source -b $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build";
  721. $cmd="dpkg-buildpackage -us -uc";
  722. print "Launch DEB build ($cmd)\n";
  723. $ret=`$cmd 2>&1 3>&1`;
  724. print $ret."\n";
  725. chdir("$olddir");
  726. print "You can check bin package with lintian --pedantic -E -I \"$NEWDESTI/${FILENAMEDEB}_all.deb\"\n";
  727. print "You can check src package with lintian --pedantic -E -I \"$NEWDESTI/${FILENAMEDEB}.dsc\"\n";
  728. # Move to final dir
  729. print "Move *_all.deb *.dsc *.orig.tar.gz *.changes to $NEWDESTI\n";
  730. $ret=`mv $BUILDROOT/*_all.deb "$NEWDESTI/"`;
  731. $ret=`mv $BUILDROOT/*.dsc "$NEWDESTI/"`;
  732. $ret=`mv $BUILDROOT/*.orig.tar.gz "$NEWDESTI/"`;
  733. $ret=`mv $BUILDROOT/*.changes "$NEWDESTI/"`;
  734. next;
  735. }
  736. if ($target eq 'APS')
  737. {
  738. $NEWDESTI=$DESTI;
  739. mkdir($DESTI.'/package_aps');
  740. if (-d $DESTI.'/package_aps') { $NEWDESTI=$DESTI.'/package_aps'; }
  741. $newbuild = $BUILD;
  742. $newbuild =~ s/(dev|alpha)/0/gi; # dev
  743. $newbuild =~ s/beta/1/gi; # beta
  744. $newbuild =~ s/rc./2/gi; # rc
  745. if ($newbuild !~ /-/) { $newbuild.='-3'; } # finale
  746. # now newbuild is 0-0 or 0-3 for example
  747. $REL1 = $newbuild; $REL1 =~ s/-.*$//gi;
  748. if ($RPMSUBVERSION eq 'auto') { $RPMSUBVERSION = $newbuild; $RPMSUBVERSION =~ s/^.*-//gi; }
  749. print "Version is $MAJOR.$MINOR.$REL1-$RPMSUBVERSION\n";
  750. print "Remove target $FILENAMEAPS.zip...\n";
  751. unlink "$NEWDESTI/$FILENAMEAPS.zip";
  752. #rmdir "$BUILDROOT/$PROJECT.tmp";
  753. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp`;
  754. print "Create directory $BUILDROOT/$PROJECT.tmp\n";
  755. $ret=`mkdir -p "$BUILDROOT/$PROJECT.tmp"`;
  756. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$PROJECT.tmp\n";
  757. $cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$PROJECT.tmp\"";
  758. $ret=`$cmd`;
  759. print "Remove other files\n";
  760. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/deb`;
  761. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/dmg`;
  762. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/doap`;
  763. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/exe`;
  764. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/live`;
  765. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/patch`;
  766. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/rpm`;
  767. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/zip`;
  768. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/perl`;
  769. $APSVERSION="1.2";
  770. print "Create APS files $BUILDROOT/$PROJECT.tmp/$PROJECT/APP-META.xml\n";
  771. open (SPECFROM,"<$BUILDROOT/$PROJECT/build/aps/APP-META-$APSVERSION.xml") || die "Error";
  772. open (SPECTO,">$BUILDROOT/$PROJECT.tmp/$PROJECT/APP-META.xml") || die "Error";
  773. while (<SPECFROM>) {
  774. $newbuild = $BUILD;
  775. $newbuild =~ s/(dev|alpha)/0/gi; # dev
  776. $newbuild =~ s/beta/1/gi; # beta
  777. $newbuild =~ s/rc./2/gi; # rc
  778. if ($newbuild !~ /-/) { $newbuild.='-3'; } # finale
  779. # now newbuild is 0-0 or 0-3 for example
  780. $_ =~ s/__VERSION__/$MAJOR.$MINOR.$REL1/;
  781. $_ =~ s/__RELEASE__/$RPMSUBVERSION/;
  782. print SPECTO $_;
  783. }
  784. close SPECFROM;
  785. close SPECTO;
  786. print "Version set to $MAJOR.$MINOR.$newbuild\n";
  787. #$cmd="cp -pr \"$BUILDROOT/$PROJECT/build/aps/configure\" \"$BUILDROOT/$PROJECT.tmp/$PROJECT/scripts/configure\"";
  788. #$ret=`$cmd`;
  789. $cmd="cp -pr \"$BUILDROOT/$PROJECT/build/aps/configure.php\" \"$BUILDROOT/$PROJECT.tmp/$PROJECT/scripts/configure.php\"";
  790. $ret=`$cmd`;
  791. $cmd="cp -pr \"$BUILDROOT/$PROJECT/doc/images\" \"$BUILDROOT/$PROJECT.tmp/$PROJECT/images\"";
  792. $ret=`$cmd`;
  793. print "Remove other files\n";
  794. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/dev`;
  795. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/doc`;
  796. print "Build APP-LIST.xml files\n";
  797. print "Compress $BUILDROOT/$PROJECT.tmp/$PROJECT into $FILENAMEAPS.zip...\n";
  798. print "Go to directory $BUILDROOT/$PROJECT.tmp\/$PROJECT\n";
  799. $olddir=getcwd();
  800. chdir("$BUILDROOT\/$PROJECT.tmp\/$PROJECT");
  801. $cmd= "zip -9 -r $BUILDROOT/$FILENAMEAPS.zip \*";
  802. print $cmd."\n";
  803. $ret= `$cmd`;
  804. chdir("$olddir");
  805. # Move to final dir
  806. print "Move $BUILDROOT/$FILENAMEAPS.zip to $NEWDESTI/$FILENAMEAPS.zip\n";
  807. $ret=`mv "$BUILDROOT/$FILENAMEAPS.zip" "$NEWDESTI/$FILENAMEAPS.zip"`;
  808. next;
  809. }
  810. if ($target eq 'EXEDOLIWAMP')
  811. {
  812. $NEWDESTI=$DESTI;
  813. mkdir($DESTI.'/package_windows');
  814. if (-d $DESTI.'/package_windows') { $NEWDESTI=$DESTI.'/package_windows'; }
  815. print "Remove target $FILENAMEEXEDOLIWAMP.exe...\n";
  816. unlink "$NEWDESTI/$FILENAMEEXEDOLIWAMP.exe";
  817. $SOURCEBACK=$SOURCE;
  818. $SOURCEBACK =~ s/\//\\/g;
  819. print "Compil exe $FILENAMEEXEDOLIWAMP.exe file from iss file \"$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.iss\"\n";
  820. $cmd= "ISCC.exe \"$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.iss\"";
  821. print "$cmd\n";
  822. $ret= `$cmd`;
  823. #print "$ret\n";
  824. # Move to final dir
  825. print "Move \"$SOURCE\\build\\$FILENAMEEXEDOLIWAMP.exe\" to $NEWDESTI/$FILENAMEEXEDOLIWAMP.exe\n";
  826. rename("$SOURCE/build/$FILENAMEEXEDOLIWAMP.exe","$NEWDESTI/$FILENAMEEXEDOLIWAMP.exe");
  827. print "Move $SOURCE/build/$FILENAMEEXEDOLIWAMP.exe to $NEWDESTI/$FILENAMEEXEDOLIWAMP.exe\n";
  828. $ret=`mv "$SOURCE/build/$FILENAMEEXEDOLIWAMP.exe" "$NEWDESTI/$FILENAMEEXEDOLIWAMP.exe"`;
  829. next;
  830. }
  831. }
  832. # Build package for each target
  833. #------------------------------
  834. foreach my $target (keys %CHOOSEDPUBLISH)
  835. {
  836. if ($CHOOSEDPUBLISH{$target} < 0) { next; }
  837. print "\nList of files to publish\n";
  838. %filestoscan=(
  839. "$DESTI/package_rpm_generic/$FILENAMERPM"=>'Dolibarr installer for Fedora-Redhat-Mandriva-Opensuse (DoliRpm)',
  840. "$DESTI/package_debian-ubuntu/${FILENAMEDEB}_all.deb"=>'Dolibarr installer for Debian-Ubuntu (DoliDeb)',
  841. "$DESTI/package_windows/$FILENAMEEXEDOLIWAMP.exe"=>'Dolibarr installer for Windows (DoliWamp)',
  842. "$DESTI/standard/$FILENAMETGZ.tgz"=>'Dolibarr ERP-CRM',
  843. "$DESTI/standard/$FILENAMETGZ.zip"=>'Dolibarr ERP-CRM'
  844. );
  845. foreach my $file (sort keys %filestoscan)
  846. {
  847. $found=0;
  848. my $filesize = -s $file;
  849. print $file." ".($filesize?"(found)":"(not found)");
  850. print ($filesize?" - ".$filesize:"");
  851. print "\n";
  852. }
  853. if ($target eq 'SF')
  854. {
  855. print "\n";
  856. $NEWPUBLISH=$PUBLISH;
  857. print "Publish to target $NEWPUBLISH. Click enter or CTRL+C...\n";
  858. # Ask which target to build
  859. $NUM_SCRIPT=<STDIN>;
  860. chomp($NUM_SCRIPT);
  861. print "Create empty dir /tmp/emptydir. We need it to create target dir using rsync.\n";
  862. $ret=`mkdir -p "/tmp/emptydir/"`;
  863. foreach my $file (sort keys %filestoscan)
  864. {
  865. $found=0;
  866. my $filesize = -s $file;
  867. if (! $filesize) { next; }
  868. print "\n";
  869. print "Publish file ".$file." to ".$filestoscan{$file}."\n";
  870. $destFolder="$NEWPUBLISH/$filestoscan{$file}/".$MAJOR.'.'.$MINOR.'.'.$BUILD;
  871. # mkdir
  872. #my $ssh = Net::SSH::Perl->new("frs.sourceforge.net");
  873. #$ssh->login("$user","$pass");
  874. #use String::ShellQuote qw( shell_quote );
  875. #$ssh->cmd('mkdir '.shell_quote($destFolder).' && exit');
  876. #use Net::SFTP::Foreign;
  877. #my $sftp = Net::SFTP::Foreign->new($ip, user => $user, password => $pass, autodie => 1);
  878. #$sftp->mkdir($destFolder)
  879. #$command="ssh eldy,dolibarr\@frs.sourceforge.net mkdir -p \"$destFolder\"";
  880. #print "$command\n";
  881. #my $ret=`$command 2>&1`;
  882. $command="rsync -s -e 'ssh' --recursive /tmp/emptydir/ \"".$destFolder."\"";
  883. print "$command\n";
  884. my $ret=`$command 2>&1`;
  885. $command="rsync -s $OPTIONUPDATEDIST -e 'ssh' \"$file\" \"".$destFolder."\"";
  886. print "$command\n";
  887. my $ret=`$command 2>&1`;
  888. print "$ret\n";
  889. }
  890. }
  891. }
  892. }
  893. print "\n----- Summary -----\n";
  894. foreach my $target (keys %CHOOSEDTARGET) {
  895. if ($CHOOSEDTARGET{$target} < 0) {
  896. print "Package $target not built (bad requirement).\n";
  897. } else {
  898. print "Package $target built successfully in $DESTI\n";
  899. }
  900. }
  901. if (! $batch) {
  902. print "\nPress key to finish...";
  903. my $WAITKEY=<STDIN>;
  904. }
  905. 0;