diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | mk/package.mk | 1 | ||||
-rw-r--r-- | package/pkgmaker | 81 |
3 files changed, 29 insertions, 54 deletions
diff --git a/.gitignore b/.gitignore index 1e46f0c60..5e17dd900 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ config/lxdialog/*.o make.log dl/ package/Config.in.auto +package/pkgconfigs.d/ package/*/info.mk package/*/Config.in package/*/Config.in.lib diff --git a/mk/package.mk b/mk/package.mk index b4b02d8a5..98c2ecda9 100644 --- a/mk/package.mk +++ b/mk/package.mk @@ -143,6 +143,7 @@ ALL_PKGOPTS+= $(1) PKGNAME_$(1)= $(2) PKGDEPS_$(1)= $(4) PKGDESC_$(1)= $(5) +PKGSECT_$(1)= $(6) IPKG_$(1)= $(PACKAGE_DIR)/$(2)_$(3)_${CPU_ARCH}.${PKG_SUFFIX} IDIR_$(1)= $(WRKDIR)/fake-${CPU_ARCH}/pkg-$(2) ifneq (${ADK_PACKAGE_$(1)}${DEVELOPER},) diff --git a/package/pkgmaker b/package/pkgmaker index bb91dbe37..5a4707937 100644 --- a/package/pkgmaker +++ b/package/pkgmaker @@ -40,12 +40,14 @@ for dn in */Makefile; do done # build Config.in files and resolve dependencies +rm -f package_sections +rm -rf pkgconfigs.d +mkdir pkgconfigs.d for dn in */Makefile; do dn=${dn%/*} - # skip if we take care of this one manually - [[ $dn != "base-files" ]] && [[ -s $dn/Config.in.manual ]] && continue pbar="Pass 2: $dn ..." print -nu2 "$pbar\r" + mkdir pkgconfigs.d/$dn cd $dn # PKG_NAME: package name (directory, free-format) @@ -61,9 +63,9 @@ for dn in */Makefile; do # CFLINE_*: one free-format Config.in line per subpackage option # PKGFD_*: flavour description, per package flavour option # PKG_{HOST,TARGET}_DEPENDS: add host or target dependencies - eval $($GMAKE dump="PKG_NAME PKG_FLAVOURS PKG_DESCR PKG_URL PKG_MULTI PKG_CXX \ + eval $($GMAKE dump="PKG_NAME PKG_FLAVOURS PKG_DESCR PKG_SECTION PKG_URL PKG_MULTI PKG_CXX \ ALL_PKGOPTS \$(foreach x,\${ALL_PKGOPTS},PKGNAME_\${x} \ - PKGDESC_\${x} PKGDEPS_\${x} PKGDFLT_\${x} CFLINE_\${x}) \ + PKGDESC_\${x} PKGDEPS_\${x} PKGDFLT_\${x} PKGSECT_\${x} CFLINE_\${x}) \ \$(foreach x,\${PKG_FLAVOURS},PKGFD_\${x}) \ PKG_HOST_DEPENDS PKG_TARGET_DEPENDS") @@ -71,8 +73,13 @@ for dn in */Makefile; do typeset -u dnu=${dn//-/_} dnu=${dnu//+/X} - ( # fd 4 = Config.in; fd 5 = Config.in.lib; fd 6 = Config.in.kmod - g5=0 + echo "pkgconfigs.d/$dn/Config.in ${PKG_SECTION:=none}" >>../package_sections + echo "$dn/Config.in.manual ${PKG_SECTION:=none}" >>../package_sections + + # skip if we take care of this one manually + [[ $dn != "base-files" ]] && [[ -s Config.in.manual ]] && { cd ..; continue; } + + exec 4>../pkgconfigs.d/$dn/Config.in # Handle master package (directory) print -u4 "config ADK_COMPILE_$dnu" @@ -165,20 +172,15 @@ for dn in */Makefile; do eval sppn=\$PKGNAME_$spcu # sppn: subpackage (ipkg) name eval desc=\$PKGDESC_$spcu # desc: subpackage description : ${desc:=$PKG_DESCR} # take from main pkg if empty + eval sect=\$PKGSECT_$spcu # sect: subpackage section + : ${sect:=$PKG_SECTION} # take from main pkg if empty eval deps=\$PKGDEPS_$spcu # deps: subpackage dependencies eval dflt=\$PKGDFLT_$spcu # dflt: config 'default' opt. eval xline=\$CFLINE_$spcu # xline: one free-format line - if [[ $spcu = LIB* ]]; then - h=5 # divert to Config.in.lib - (( g5++ )) && print -u5 # been here before - elif [[ $spcu = KMOD* ]]; then - h=6 - (( g6++ )) && print -u6 - else - h=4 # divert to Config.in - print -u4 - fi + echo "pkgconfigs.d/$dn/Config.in.$sppn $sect" >>../package_sections + exec 4>../pkgconfigs.d/$dn/Config.in.$sppn + h=4 print -u$h config ADK_PACKAGE_$spcu spnf=$sppn # spnf: subpackage name, filled @@ -261,7 +263,6 @@ EOF print "\t flavour ADK_PACKAGE_${dnu}_$pfcu for $PKG_NAME" done >&4 - ) 4>Config.in 5>Config.in.lib 6>Config.in.kmod cd .. done @@ -285,44 +286,16 @@ function get_first_prompt() { [[ -n $prompt ]] && echo $prompt } -# collect packages along with their section and -# create a list of '<name> <path to config.in> <section string>' for later sorting -rm -f package_section_list -for dn in */Makefile; do - dn=${dn%/*} - pbar="Pass 3: $dn ..." +# prepare Config.in list for sorting +while read config_in section; do + pbar="Pass 3: $config_in ..." print -nu2 "$pbar\r" - cd $dn - eval $($GMAKE dump="PKG_NAME PKG_SECTION") - cd .. - - # ignore section kernel, these are included inside target/config - [[ $PKG_SECTION = kernel ]] && continue - - PKG_SECTION=${PKG_SECTION:-none} - - has_config_in=false - if non_empty_file $dn/Config.in; then - prompt="$(get_first_prompt $dn/Config.in)" - prompt="${prompt:-$PKG_NAME}" - echo "$prompt $dn/Config.in $(lookup_section_string $PKG_SECTION)" - has_config_in=true - fi - if non_empty_file $dn/Config.in.lib; then - prompt="$(get_first_prompt $dn/Config.in.lib)" - prompt="${prompt:-$PKG_NAME}" - echo "$prompt $dn/Config.in.lib $(lookup_section_string libs)" - has_config_in=true - fi - if non_empty_file $dn/Config.in.manual; then - prompt="$(get_first_prompt $dn/Config.in.manual)" - prompt="${prompt:-$PKG_NAME}" - echo "$prompt $dn/Config.in.manual $(lookup_section_string $PKG_SECTION)" - has_config_in=true - fi - $has_config_in || print -u2 "$dn: No Config.in file found?!" -done >package_section_list + non_empty_file $config_in || continue + prompt="$(get_first_prompt $config_in)" + [[ -n $prompt ]] || continue + echo "$prompt $config_in $(lookup_section_string $section)" +done <package_sections >package_section_list # create the Config.in.auto from the sorted list from above cursec="" @@ -339,4 +312,4 @@ sort -k 3 -k 1 -f package_section_list | while read name file section; do print "source \"package/$file\"" done >Config.in.auto print "endmenu\n" >>Config.in.auto -rm -f package_section_list +rm -f package_sections package_section_list |