From 8878af0872f445f3d1dd66f094c30325ac329464 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur <eldy@users.sourceforge.net> Date: Thu, 3 Mar 2011 19:36:54 +0000 Subject: [PATCH] Prepare build of modules for 3.0 --- build/makepack-dolibarrmodule.pl | 440 +++++++++++++++++-------------- 1 file changed, 236 insertions(+), 204 deletions(-) diff --git a/build/makepack-dolibarrmodule.pl b/build/makepack-dolibarrmodule.pl index fd17f4312ee..0f66e4f1032 100644 --- a/build/makepack-dolibarrmodule.pl +++ b/build/makepack-dolibarrmodule.pl @@ -78,23 +78,8 @@ for (0..@ARGV-1) { } } -print "Makepack module version $VERSION\n"; -print "Enter name for your module (mymodule, mywonderfulmondule, ...) : "; -$PROJECT=<STDIN>; -chomp($PROJECT); -print "Move to ".$DIR." directory.\n"; -chdir($DIR); +print "Makepack for modules version $VERSION\n"; -if (! -f "makepack-".$PROJECT.".conf") -{ - print "Error: can't open conf file makepack-".$PROJECT.".conf\n"; - print "\n"; - print "For help on building a module package, see web page\n"; - print "http://wiki.dolibarr.org/index.php/Module_development#Create_a_package_to_distribute_and_install_your_module\n"; - print "makepack-dolibarrmodule.pl aborted.\n"; - sleep 2; - exit 2; -} # Ask and set version $MAJOR and $MINOR print "Enter value for version: "; $PROJVERSION=<STDIN>; @@ -102,22 +87,17 @@ chomp($PROJVERSION); ($MAJOR,$MINOR,$BUILD)=split(/\./,$PROJVERSION,3); if ($MINOR eq '') { - print "Enter value for minor version: "; - $MINOR=<STDIN>; - chomp($MINOR); + print "Enter value for minor version: "; + $MINOR=<STDIN>; + chomp($MINOR); } -$FILENAME="$PROJECT"; -$FILENAMETGZ="module_$PROJECT-$MAJOR.$MINOR"; -$FILENAMEZIP="module_$PROJECT-$MAJOR.$MINOR"; -if (-d "/usr/src/redhat") { - # redhat - $RPMDIR="/usr/src/redhat"; -} -if (-d "/usr/src/RPM") { - # mandrake - $RPMDIR="/usr/src/RPM"; -} +# Ask module +print "Enter name for your module (mymodule, mywonderfulmondule, ...) : "; +$PROJECTINPUT=<STDIN>; +chomp($PROJECTINPUT); +print "Move to ".$DIR." directory.\n"; +chdir($DIR); $SOURCE="$DIR/.."; $DESTI="$SOURCE/build"; @@ -125,196 +105,248 @@ $DESTI="$SOURCE/build"; print "Source directory: $SOURCE\n"; print "Target directory: $DESTI\n"; - -# Choose package targets -#----------------------- -$target="ZIP"; # Dolibarr modules are this format -$CHOOSEDTARGET{uc($target)}=1; - - -# Test if requirement is ok -#-------------------------- -foreach my $target (keys %CHOOSEDTARGET) { - foreach my $req (split(/[,\s]/,$REQUIREMENTTARGET{$target})) { - # Test - print "Test requirement for target $target: Search '$req'... "; - $ret=`"$req" 2>&1`; - $coderetour=$?; $coderetour2=$coderetour>>8; - if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/)) && $PROGPATH) { - # Not found error, we try in PROGPATH - $ret=`"$PROGPATH/$ALTERNATEPATH{$req}/$req\" 2>&1`; - $coderetour=$?; $coderetour2=$coderetour>>8; - $REQUIREMENTTARGET{$target}="$PROGPATH/$ALTERNATEPATH{$req}/$req"; - } - - if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/))) { - # Not found error - print "Not found\nCan't build target $target. Requirement '$req' not found in PATH\n"; - $CHOOSEDTARGET{$target}=-1; - last; - } else { - # Pas erreur ou erreur autre que programme absent - print " Found ".$REQUIREMENTTARGET{$target}."\n"; - } +my @PROJECTLIST=(); +if ($PROJECTINPUT eq "all") +{ + opendir(DIR, $DIR) || return; + local @rv = grep { /^makepack\-(.*)\.conf$/ } sort readdir(DIR); + closedir(DIR); + foreach my $xxx (0..@rv-1) { + if ($rv[$xxx] =~ /^makepack\-(.*)\.conf$/) + { + @PROJECTLIST[$xxx]=$1; + } } } +else +{ + @PROJECTLIST=($PROJECTINPUT); +} -print "\n"; -# Check if there is at least on target to build -#---------------------------------------------- -$nboftargetok=0; -$nboftargetneedbuildroot=0; -$nboftargetneedcvs=0; -foreach my $target (keys %CHOOSEDTARGET) { - if ($CHOOSEDTARGET{$target} < 0) { next; } - if ($target ne 'EXE' && $target ne 'EXEDOLIWAMP') +# Loop on each projects +foreach my $PROJECT (@PROJECTLIST) { + + if (! -f "makepack-".$PROJECT.".conf") { - $nboftargetneedbuildroot++; + print "Error: can't open conf file makepack-".$PROJECT.".conf\n"; + print "\n"; + print "For help on building a module package, see web page\n"; + print "http://wiki.dolibarr.org/index.php/Module_development#Create_a_package_to_distribute_and_install_your_module\n"; + print "makepack-dolibarrmodule.pl aborted.\n"; + sleep 2; + exit 2; } - if ($target eq 'SNAPSHOT') - { - $nboftargetneedcvs++; + + $FILENAME="$PROJECT"; + $FILENAMETGZ="module_$PROJECT-$MAJOR.$MINOR"; + $FILENAMEZIP="module_$PROJECT-$MAJOR.$MINOR"; + if (-d "/usr/src/redhat") { + # redhat + $RPMDIR="/usr/src/redhat"; } - $nboftargetok++; -} - -if ($nboftargetok) { - - # Update CVS if required - #----------------------- - if ($nboftargetneedcvs) - { - print "Go to directory $SOURCE\n"; - $olddir=getcwd(); - chdir("$SOURCE"); - print "Run cvs update -P -d\n"; - $ret=`cvs update -P -d 2>&1`; - chdir("$olddir"); + if (-d "/usr/src/RPM") { + # mandrake + $RPMDIR="/usr/src/RPM"; } - # Update buildroot if required - #----------------------------- - if ($nboftargetneedbuildroot) - { - if (! $copyalreadydone) { - print "Delete directory $BUILDROOT\n"; - $ret=`rm -fr "$BUILDROOT"`; - - mkdir "$BUILDROOT"; - mkdir "$BUILDROOT/$PROJECT"; - - $result=open(IN,"<makepack-".$PROJECT.".conf"); - if (! $result) { die "Error: Can't open conf file makepack-".$PROJECT.".conf for reading.\n"; } - while(<IN>) - { - if ($_ =~ /^#/) { next; } # Do not process comments + + # Choose package targets + #----------------------- + $target="ZIP"; # Dolibarr modules are this format + $CHOOSEDTARGET{uc($target)}=1; + + + # Test if requirement is ok + #-------------------------- + foreach my $target (keys %CHOOSEDTARGET) { + foreach my $req (split(/[,\s]/,$REQUIREMENTTARGET{$target})) { + # Test + print "Test requirement for target $target: Search '$req'... "; + $ret=`"$req" 2>&1`; + $coderetour=$?; $coderetour2=$coderetour>>8; + if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/)) && $PROGPATH) { + # Not found error, we try in PROGPATH + $ret=`"$PROGPATH/$ALTERNATEPATH{$req}/$req\" 2>&1`; + $coderetour=$?; $coderetour2=$coderetour>>8; + $REQUIREMENTTARGET{$target}="$PROGPATH/$ALTERNATEPATH{$req}/$req"; + } + + if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/))) { + # Not found error + print "Not found\nCan't build target $target. Requirement '$req' not found in PATH\n"; + $CHOOSEDTARGET{$target}=-1; + last; + } else { + # Pas erreur ou erreur autre que programme absent + print " Found ".$REQUIREMENTTARGET{$target}."\n"; + } + } + } + + print "\n"; + + # Check if there is at least on target to build + #---------------------------------------------- + $nboftargetok=0; + $nboftargetneedbuildroot=0; + $nboftargetneedcvs=0; + foreach my $target (keys %CHOOSEDTARGET) { + if ($CHOOSEDTARGET{$target} < 0) { next; } + if ($target ne 'EXE' && $target ne 'EXEDOLIWAMP') + { + $nboftargetneedbuildroot++; + } + if ($target eq 'SNAPSHOT') + { + $nboftargetneedcvs++; + } + $nboftargetok++; + } + + if ($nboftargetok) { + + # Update CVS if required + #----------------------- + if ($nboftargetneedcvs) + { + print "Go to directory $SOURCE\n"; + $olddir=getcwd(); + chdir("$SOURCE"); + print "Run cvs update -P -d\n"; + $ret=`cvs update -P -d 2>&1`; + chdir("$olddir"); + } + + # Update buildroot if required + #----------------------------- + if ($nboftargetneedbuildroot) + { + if (! $copyalreadydone) { + print "Delete directory $BUILDROOT\n"; + $ret=`rm -fr "$BUILDROOT"`; + + mkdir "$BUILDROOT"; + mkdir "$BUILDROOT/$PROJECT"; + + $result=open(IN,"<makepack-".$PROJECT.".conf"); + if (! $result) { die "Error: Can't open conf file makepack-".$PROJECT.".conf for reading.\n"; } + while(<IN>) + { + if ($_ =~ /^#/) { next; } # Do not process comments + + $_ =~ s/\n//; + $_ =~ /^(.*)\/[^\/]+/; + print "Create directory $BUILDROOT/$PROJECT/$1\n"; + $ret=`mkdir -p "$BUILDROOT/$PROJECT/$1"`; + if ($_ !~ /version\-/) + { + print "Copy $SOURCE/$_ into $BUILDROOT/$PROJECT/$_\n"; + $ret=`cp -pr "$SOURCE/$_" "$BUILDROOT/$PROJECT/$_"`; + } + } + close IN; - $_ =~ s/\n//; - $_ =~ /^(.*)\/[^\/]+/; - print "Create directory $BUILDROOT/$PROJECT/$1\n"; - $ret=`mkdir -p "$BUILDROOT/$PROJECT/$1"`; - print "Copy $SOURCE/$_ into $BUILDROOT/$PROJECT/$_\n"; - $ret=`cp -pr "$SOURCE/$_" "$BUILDROOT/$PROJECT/$_"`; - } - close IN; - - @timearray=localtime(time()); - $fulldate=($timearray[5]+1900).'-'.($timearray[4]+1).'-'.$timearray[3].' '.$timearray[2].':'.$timearray[1]; - open(VF,">$BUILDROOT/$PROJECT/build/version-".$PROJECT.".txt"); + @timearray=localtime(time()); + $fulldate=($timearray[5]+1900).'-'.($timearray[4]+1).'-'.$timearray[3].' '.$timearray[2].':'.$timearray[1]; + open(VF,">$BUILDROOT/$PROJECT/build/version-".$PROJECT.".txt"); + + print "Create version file $BUILDROOT/$PROJECT/build/version-".$PROJECT.".txt with date ".$fulldate."\n"; + $ret=`mkdir -p "$BUILDROOT/$PROJECT/build"`; + print VF "Version: ".$MAJOR.".".$MINOR."\n"; + print VF "Build : ".$fulldate."\n"; + close VF; + } + print "Clean $BUILDROOT\n"; + $ret=`rm -fr $BUILDROOT/$PROJECT/.cache`; + $ret=`rm -fr $BUILDROOT/$PROJECT/.project`; + $ret=`rm -fr $BUILDROOT/$PROJECT/.settings`; + $ret=`rm -fr $BUILDROOT/$PROJECT/index.php`; + $ret=`rm -fr $BUILDROOT/$PROJECT/build/html`; + $ret=`rm -fr $BUILDROOT/$PROJECT/documents`; + $ret=`rm -fr $BUILDROOT/$PROJECT/document`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/conf/conf.php.mysql`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/conf/conf.php.old`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/conf/conf.php.postgres`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/conf/conf*sav*`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/custom`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/custom2`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/theme/bureau2crea`; + $ret=`rm -fr $BUILDROOT/$PROJECT/test`; + $ret=`rm -fr $BUILDROOT/$PROJECT/Thumbs.db $BUILDROOT/$PROJECT/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/*/Thumbs.db`; + $ret=`rm -fr $BUILDROOT/$PROJECT/CVS* $BUILDROOT/$PROJECT/*/CVS* $BUILDROOT/$PROJECT/*/*/CVS* $BUILDROOT/$PROJECT/*/*/*/CVS* $BUILDROOT/$PROJECT/*/*/*/*/CVS* $BUILDROOT/$PROJECT/*/*/*/*/*/CVS*`; + } + + # Build package for each target + #------------------------------ + foreach my $target (keys %CHOOSEDTARGET) { + if ($CHOOSEDTARGET{$target} < 0) { next; } + + print "\nBuild package for target $target\n"; + + if ($target eq 'TGZ') { + print "Remove target $FILENAMETGZ.tgz...\n"; + unlink("$DESTI/$FILENAMETGZ.tgz"); + print "Compress $BUILDROOT/* into $FILENAMETGZ.tgz...\n"; + $cmd="tar --exclude-vcs --exclude *.tgz --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$FILENAMETGZ.tgz\" ."; + $ret=`$cmd`; + if ($OS =~ /windows/i) { + print "Move $FILENAMETGZ.tgz to $DESTI/$FILENAMETGZ.tgz\n"; + $ret=`mv "$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`; + } + else + { + $ret=`mv "$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`; + } + next; + } + + if ($target eq 'ZIP') { + print "Remove target $FILENAMEZIP.zip...\n"; + unlink "$DESTI/$FILENAMEZIP.zip"; + print "Compress $FILENAMEZIP into $FILENAMEZIP.zip...\n"; - print "Create version file $BUILDROOT/$PROJECT/build/version-".$PROJECT.".txt with date ".$fulldate."\n"; - $ret=`mkdir -p "$BUILDROOT/$PROJECT/build"`; - print VF "Version: ".$MAJOR.".".$MINOR."\n"; - print VF "Build : ".$fulldate."\n"; - close VF; + print "Go to directory $BUILDROOT/$PROJECT\n"; + $olddir=getcwd(); + chdir("$BUILDROOT/$PROJECT"); + $cmd= "7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip *"; + print $cmd."\n"; + $ret= `$cmd`; + chdir("$olddir"); + + print "Move $FILENAMEZIP.zip to $DESTI/$FILENAMEZIP.zip\n"; + $ret=`mv "$BUILDROOT/$FILENAMEZIP.zip" "$DESTI/$FILENAMEZIP.zip"`; + next; + } + + if ($target eq 'EXE') { + print "Remove target $FILENAMEEXE.exe...\n"; + unlink "$DESTI/$FILENAMEEXE.exe"; + print "Compress into $FILENAMEEXE.exe by $FILENAMEEXE.nsi...\n"; + $command="\"$REQUIREMENTTARGET{$target}\" /DMUI_VERSION_DOT=$MAJOR.$MINOR.$BUILD /X\"SetCompressor bzip2\" \"$SOURCE\\build\\exe\\$FILENAME.nsi\""; + print "$command\n"; + $ret=`$command`; + print "Move $FILENAMEEXE.exe to $DESTI\n"; + rename("$SOURCE\\build\\exe\\$FILENAMEEXE.exe","$DESTI/$FILENAMEEXE.exe"); + next; + } + } - print "Clean $BUILDROOT\n"; - $ret=`rm -fr $BUILDROOT/$PROJECT/.cache`; - $ret=`rm -fr $BUILDROOT/$PROJECT/.project`; - $ret=`rm -fr $BUILDROOT/$PROJECT/.settings`; - $ret=`rm -fr $BUILDROOT/$PROJECT/index.php`; - $ret=`rm -fr $BUILDROOT/$PROJECT/build/html`; - $ret=`rm -fr $BUILDROOT/$PROJECT/documents`; - $ret=`rm -fr $BUILDROOT/$PROJECT/document`; - $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/conf/conf.php.mysql`; - $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/conf/conf.php.old`; - $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/conf/conf.php.postgres`; - $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/conf/conf*sav*`; - $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/custom`; - $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/custom2`; - $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/theme/bureau2crea`; - $ret=`rm -fr $BUILDROOT/$PROJECT/test`; - $ret=`rm -fr $BUILDROOT/$PROJECT/Thumbs.db $BUILDROOT/$PROJECT/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/*/Thumbs.db`; - $ret=`rm -fr $BUILDROOT/$PROJECT/CVS* $BUILDROOT/$PROJECT/*/CVS* $BUILDROOT/$PROJECT/*/*/CVS* $BUILDROOT/$PROJECT/*/*/*/CVS* $BUILDROOT/$PROJECT/*/*/*/*/CVS* $BUILDROOT/$PROJECT/*/*/*/*/*/CVS*`; - } - - # Build package for each target - #------------------------------ - foreach my $target (keys %CHOOSEDTARGET) { - if ($CHOOSEDTARGET{$target} < 0) { next; } - - print "\nBuild package for target $target\n"; - - if ($target eq 'TGZ') { - print "Remove target $FILENAMETGZ.tgz...\n"; - unlink("$DESTI/$FILENAMETGZ.tgz"); - print "Compress $BUILDROOT/* into $FILENAMETGZ.tgz...\n"; - $cmd="tar --exclude-vcs --exclude *.tgz --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$FILENAMETGZ.tgz\" ."; - $ret=`$cmd`; - if ($OS =~ /windows/i) { - print "Move $FILENAMETGZ.tgz to $DESTI/$FILENAMETGZ.tgz\n"; - $ret=`mv "$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`; - } - else - { - $ret=`mv "$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`; - } - next; - } - - if ($target eq 'ZIP') { - print "Remove target $FILENAMEZIP.zip...\n"; - unlink "$DESTI/$FILENAMEZIP.zip"; - print "Compress $FILENAMEZIP into $FILENAMEZIP.zip...\n"; - - print "Go to directory $BUILDROOT/$PROJECT\n"; - $olddir=getcwd(); - chdir("$BUILDROOT/$PROJECT"); - $cmd= "7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip *"; - print $cmd."\n"; - $ret= `$cmd`; - chdir("$olddir"); + + } + + print "\n----- Summary -----\n"; + foreach my $target (keys %CHOOSEDTARGET) { + if ($CHOOSEDTARGET{$target} < 0) { + print "Package $target not built (bad requirement).\n"; + } else { + print "Package $target built successfully in $DESTI\n"; + } + } - print "Move $FILENAMEZIP.zip to $DESTI/$FILENAMEZIP.zip\n"; - $ret=`mv "$BUILDROOT/$FILENAMEZIP.zip" "$DESTI/$FILENAMEZIP.zip"`; - next; - } - - if ($target eq 'EXE') { - print "Remove target $FILENAMEEXE.exe...\n"; - unlink "$DESTI/$FILENAMEEXE.exe"; - print "Compress into $FILENAMEEXE.exe by $FILENAMEEXE.nsi...\n"; - $command="\"$REQUIREMENTTARGET{$target}\" /DMUI_VERSION_DOT=$MAJOR.$MINOR.$BUILD /X\"SetCompressor bzip2\" \"$SOURCE\\build\\exe\\$FILENAME.nsi\""; - print "$command\n"; - $ret=`$command`; - print "Move $FILENAMEEXE.exe to $DESTI\n"; - rename("$SOURCE\\build\\exe\\$FILENAMEEXE.exe","$DESTI/$FILENAMEEXE.exe"); - next; - } - - } } -print "\n----- Summary -----\n"; -foreach my $target (keys %CHOOSEDTARGET) { - if ($CHOOSEDTARGET{$target} < 0) { - print "Package $target not built (bad requirement).\n"; - } else { - print "Package $target built successfully in $DESTI\n"; - } -} if (! $batch) { print "\nPress key to finish..."; -- GitLab