Author: sh-sh-sh Date: Thu Dec 20 13:25:33 2007 New Revision: 43203 URL: http://svn.opensuse.org/viewcvs/yast?rev=43203&view=rev Log: Added support for cmake-based projects to y2makeall (Not just completely out of tree like libzypp, even subdirs in the normal yast2 SVN tree) Modified: trunk/devtools/devtools/bin/y2makeall trunk/devtools/package/yast2-devtools.changes Modified: trunk/devtools/devtools/bin/y2makeall URL: http://svn.opensuse.org/viewcvs/yast/trunk/devtools/devtools/bin/y2makeall?r... ============================================================================== --- trunk/devtools/devtools/bin/y2makeall (original) +++ trunk/devtools/devtools/bin/y2makeall Thu Dec 20 13:25:33 2007 @@ -72,10 +72,11 @@ ); -my $work_root = $ENV{'PWD'}; -my $build_root = $work_root . "/build"; -my $make_log = $work_root . "/make.log"; -my $failed_log = $work_root . "/failed-packages.log"; +my $work_root = $ENV{'PWD'}; +my $build_root = $work_root . "/build"; +my $make_log = $work_root . "/make.log"; +my $failed_log = $work_root . "/failed-packages.log"; +my $cmake_build_dir = "build"; # relative to project directory # @@ -92,8 +93,6 @@ my $libzypp_prefix = "/usr"; my $icecream_prefix = "/opt/icecream"; my $jobs = 8; - -# cmake defines my $zypp_defines = ""; # Verbosity values @@ -233,13 +232,13 @@ # # Build libzypp if necessary and # make sure we have exactly one version of libzypp installed - # + # make_libzypp_build() if $build_libzypp; check_libzypp() unless $ignore_libzypp; # - # disable icecream_prefix if we don't need it + # disable icecream_prefix if we don't need it # $icecream_prefix = "" unless $enable_icecream; @@ -860,19 +859,6 @@ #----------------------------------------------------------------------------- -# Build libzypp - -sub make_libzypp_build() -{ - # zypp cmake defines - - my $zypp_defines = "-DCMAKE_INSTALL_PREFIX=$libzypp_prefix"; - - cmake( $libzypp_source, $zypp_defines ); - -} - -#----------------------------------------------------------------------------- # Build in build order @@ -916,92 +902,157 @@ } } + #----------------------------------------------------------------------------- -# Make cmake package. +# Make one package. # # Parameters: -# $dir source dir -# $defines cmake build defines +# $pkg package to build (from $work) -sub cmake() +sub make() { - my( $pkg_dir, $defines ) = @_; + my( $pkg_dir ) = @_; my $error = 0; - my $pkg = basename( $pkg_dir ); chdir $work_root; + chdir $pkg_dir; - log_progress( "Building", $pkg ); - log_progress( "\tcreate temp. build dir" ); - system_int( "mkdir -p $build_root/$pkg >>$make_log 2>&1" ); + # Check if this is a CMake-based project. - if ( $CHILD_ERROR ) - { - log_error( "'mkdir -p $build_root/$pkg' failed for $pkg: $!" ); - $error = 1; - } + my $is_cmake_project = 0; + $is_cmake_project = 1 if -f "CMakeLists.txt" && ! ( -f "configure.in.in" || -f "configure.in" ); # - # cmake in build dir + # Display progress # - if ( ! $error ) - { - chdir "$build_root/$pkg"; + log_progress( "Building", basename( $pkg_dir ), + $is_cmake_project ? "(cmake based)" : "" ); - log_progress( "\tcmake build in $pkg_dir" ); - system_int( "cmake $defines $pkg_dir >>$make_log 2>&1" ); + # + # Prepare make environment + # + + my $path = "$prefix/bin:$PATH"; + $path = "$icecream_prefix/bin:$path" if $icecream_prefix; + + my $ld_library_path = + "$libzypp_prefix/lib64" + . ":$libzypp_prefix/lib" + ; + + my $pkg_config_path = + "$libzypp_prefix/lib64/pkgconfig" + . ":$libzypp_prefix/lib/pkgconfig" + . ":$prefix/lib64/pkgconfig" + . ":$prefix/lib/pkgconfig" + . ":$prefix/share/pkgconfig" + ; + + my $perllib = + "$prefix/lib/perl5/5.8.8/x86_64-linux-thread-multi" + . ":$prefix/lib/perl5/5.8.8" + . ":$prefix/lib/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi" + . ":$prefix/lib/perl5/vendor_perl/5.8.8" + . ":$prefix/lib/perl5/vendor_perl" + ; + + my $make_env = + "PATH="$path"" + . " YCPC_Y2DIR=$prefix/share/YaST2" + . " PREFIX=$prefix" + . " PKG_CONFIG_PATH="$pkg_config_path$PKG_CONFIG_PATH"" + . " YCPC_LD_LIBRARY_PATH="$ld_library_path"" + . " PERLLIB="$perllib"" + ; + + + # Check if "make -f Makefile.cvs" must be performed. + # Even if command line option "-f" (fast mode - sets $disable_make_makefile_cvs) + # is given, it still needs to be done if there is no toplevel Makefile. + + my $do_make_makefile_cvs = 1; + $do_make_makefile_cvs = 0 if $disable_make_makefile_cvs; + my $toplevel_makefile = $is_cmake_project ? "$cmake_build_dir/Makefile" : "Makefile"; + $do_make_makefile_cvs = 1 unless -f $toplevel_makefile; + + # + # make -f Makefile.cvs + # + + if ( $do_make_makefile_cvs ) + { + log_info( "\trm -rf autom4te.cache" ); + system_int( "rm -rf autom4te.cache >>$make_log 2>&1" ) unless $dry_run; + + log_progress( "\tmake -f Makefile.cvs" ); + system_int( "$make_env make -e -f Makefile.cvs >>$make_log 2>&1" ) unless $dry_run; if ( $CHILD_ERROR ) { - log_error( "'cmake $defines $pkg_dir' failed for $pkg" ); + log_error( "'make -f Makefile.cvs' failed for $pkg_dir" ); $error = 1; } } + # # make # + if ( $is_cmake_project ) + { + chdir( $cmake_build_dir ); + my $dir = basename( $pkg_dir ); + log_progress( "\tcd $dir/$cmake_build_dir" ); + # system_int( "pwd" ); + } + if ( ! $error ) { - log_progress ( "\tmake $pkg" ); - system_int( "make -C $build_root/$pkg -j$jobs $make_target >>$make_log 2>&1" ); + log_progress( "\tmake $make_target" ); + system_int( "$make_env make -e -j$jobs $make_target >>$make_log 2>&1" ) unless $dry_run; if ( $CHILD_ERROR ) { - log_error( "'make -C $build_root/$pkg -j$jobs $make_target' failed for $pkg" ); + log_error( "'make -j$jobs $make_target' failed for $pkg_dir" ); $error = 1; } } + # # sudo make install # if ( $make_target eq "" && ! $error ) { - log_progress( "\t$sudo_cmd make -C $build_root/$pkg install" ); - sudo_system_int( "make -C $build_root/$pkg install >>$make_log 2>&1" ); + log_progress( "\t$sudo_cmd make install" ); + sudo_system_int( "make install >>$make_log 2>&1" ) unless $dry_run; if ( $CHILD_ERROR ) { - log_error( "'$sudo_cmd make -C $build_root/$pkg install' failed for $pkg" ); + log_error( "'$sudo_cmd make install' failed for $pkg_dir" ); $error = 1; } } + # # Summary # if ( $error ) { - push( @failed_dirs, $pkg ); - print FAILED_LOG "$pkg\n"; + my $dir = basename( $pkg_dir ); + push( @failed_dirs, $dir ); + my $rpm = $rpm_names{ $dir }; + my $msg = "$dir"; + $msg .= "\t\t\t(base package)" if defined( $base_rpms{ $rpm } ); + print FAILED_LOG "$msg\n"; } else { @@ -1012,131 +1063,108 @@ chdir $work_root; } -#----------------------------------------------------------------------------- - -# Make one package. -# -# Parameters: -# $pkg package to build (from $work) - -sub make() -{ - my( $pkg_dir ) = @_; - my $error = 0; - chdir $work_root; - chdir $pkg_dir; +#----------------------------------------------------------------------------- - log_progress( "Building", basename( $pkg_dir ) ); - my $make_env = ""; - my $path = ""; - my $pkg_config_path = ""; - my $ld_library_path = ""; - my $perllib = ""; +# Build libzypp - # - # prepare make environment - # +sub make_libzypp_build() +{ + # zypp cmake defines - # libzypp pkgconfig path - $ld_library_path = "$libzypp_prefix/lib64:$libzypp_prefix/lib"; - $pkg_config_path = "$libzypp_prefix/lib64/pkgconfig:$libzypp_prefix/lib/pkgconfig:"; + my $zypp_defines = "-DCMAKE_INSTALL_PREFIX=$libzypp_prefix"; - # YaST pkgconfig path + non_y2_cmake( $libzypp_source, $zypp_defines ); +} - $pkg_config_path .= "$prefix/lib64/pkgconfig:$prefix/lib/pkgconfig:$prefix/share/pkgconfig:"; - # perl libs - $perllib = "$prefix/lib/perl5/5.8.8/x86_64-linux-thread-multi:$prefix/lib/perl5/5.8.8:" . - "$prefix/lib/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi:$prefix/lib/perl5/vendor_perl/5.8.8:" . - "$prefix/lib/perl5/vendor_perl"; +#----------------------------------------------------------------------------- - # PATH - - $path = "$prefix/bin:$PATH"; - $path = "$icecream_prefix/bin:" . $path if $icecream_prefix; +# Make a non-YaST2 project that is based on cmake. +# +# Parameters: +# $dir source dir +# $defines cmake build defines - # install prefix and PKG_CONFIG_PATH +sub non_y2_cmake() +{ + my( $pkg_dir, $defines ) = @_; + my $error = 0; + my $pkg = basename( $pkg_dir ); - $make_env = "YCPC_Y2DIR=$prefix/share/YaST2 PREFIX=$prefix PKG_CONFIG_PATH="$pkg_config_path$PKG_CONFIG_PATH" PATH="$path" YCPC_LD_LIBRARY_PATH="$ld_library_path" PERLLIB="$perllib""; + chdir $work_root; + log_progress( "Building", $pkg ); + log_progress( "\tcreate temp. build dir" ); - # Check if "make -f Makefile.cvs" must be performed. - # Even if command line option "-f" (fast mode - sets $disable_make_makefile_cvs) - # is given, it still needs to be done if there is no toplevel Makefile. + system_int( "mkdir -p $build_root/$pkg >>$make_log 2>&1" ); - my $do_make_makefile_cvs = 1; - $do_make_makefile_cvs = 0 if $disable_make_makefile_cvs; - $do_make_makefile_cvs = 1 unless -f "Makefile"; + if ( $CHILD_ERROR ) + { + log_error( "'mkdir -p $build_root/$pkg' failed for $pkg: $!" ); + $error = 1; + } # - # make -f Makefile.cvs + # cmake in build dir # - if ( $do_make_makefile_cvs ) + if ( ! $error ) { + chdir "$build_root/$pkg"; - log_info( "\trm -rf autom4te.cache" ); - system_int( "rm -rf autom4te.cache >>$make_log 2>&1" ) unless $dry_run; + log_progress( "\tcmake build in $pkg_dir" ); - log_progress( "\tmake -f Makefile.cvs" ); - system_int( "$make_env make -e -f Makefile.cvs >>$make_log 2>&1" ) unless $dry_run; + system_int( "cmake $defines $pkg_dir >>$make_log 2>&1" ); if ( $CHILD_ERROR ) { - log_error( "'make -f Makefile.cvs' failed for $pkg_dir" ); + log_error( "'cmake $defines $pkg_dir' failed for $pkg" ); $error = 1; } } - # # make # if ( ! $error ) { - log_progress( "\tmake $make_target" ); - system_int( "$make_env make -e -j$jobs $make_target >>$make_log 2>&1" ) unless $dry_run; + log_progress ( "\tmake $pkg" ); + system_int( "make -C $build_root/$pkg -j$jobs $make_target >>$make_log 2>&1" ); if ( $CHILD_ERROR ) { - log_error( "'make -j$jobs $make_target' failed for $pkg_dir" ); + log_error( "'make -C $build_root/$pkg -j$jobs $make_target' failed for $pkg" ); $error = 1; } } - # # sudo make install # if ( $make_target eq "" && ! $error ) { - log_progress( "\t$sudo_cmd make install" ); - sudo_system_int( "make install >>$make_log 2>&1" ) unless $dry_run; + log_progress( "\t$sudo_cmd make -C $build_root/$pkg install" ); + sudo_system_int( "make -C $build_root/$pkg install >>$make_log 2>&1" ); if ( $CHILD_ERROR ) { - log_error( "'$sudo_cmd make install' failed for $pkg_dir" ); + log_error( "'$sudo_cmd make -C $build_root/$pkg install' failed for $pkg" ); $error = 1; } } - # # Summary # if ( $error ) { - my $dir = basename( $pkg_dir ); - push( @failed_dirs, $dir ); - my $rpm = $rpm_names{ $dir }; - my $msg = "$dir"; - $msg .= "\t\t\t(base package)" if defined( $base_rpms{ $rpm } ); - print FAILED_LOG "$msg\n"; + push( @failed_dirs, $pkg ); + print FAILED_LOG "$pkg\n"; } else { @@ -1376,7 +1404,7 @@ --build-libzypp build libzypp, too --libzypp-source <dir> libzypp source directory, required for building libzypp - --libzypp-prefix <prefix> use <prefix> instead of /usr + --libzypp-prefix <prefix> use <prefix> instead of /usr --dump-build-order only dump the build order to stdout and log --dump-dependencies only dump package dependencies to stdout and log @@ -1384,7 +1412,7 @@ --ignore-libzypp do not complain if multiple versions of libzypp are installed --icecream build on icecream - --icecream-prefix <prefix> use <prefix> instead of /opt/icecream + --icecream-prefix <prefix> use <prefix> instead of /opt/icecream --jobs Specifies the number of jobs to run simultaneously (default 8) -v (--verbose) verbose output Modified: trunk/devtools/package/yast2-devtools.changes URL: http://svn.opensuse.org/viewcvs/yast/trunk/devtools/package/yast2-devtools.c... ============================================================================== --- trunk/devtools/package/yast2-devtools.changes (original) +++ trunk/devtools/package/yast2-devtools.changes Thu Dec 20 13:25:33 2007 @@ -1,4 +1,11 @@ ------------------------------------------------------------------- +Thu Dec 20 13:23:44 CET 2007 - sh@suse.de + +- Added support for cmake-based projects to y2makeall + (Not just completely out of tree like libzypp, even subdirs + in the normal yast2 SVN tree) + +------------------------------------------------------------------- Mon Dec 3 10:02:27 CET 2007 - coolo@suse.de - include cmake directories -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org