From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx1.pokylinux.org (Postfix) with ESMTP id 1A6254C811DB for ; Tue, 7 Dec 2010 16:13:14 -0600 (CST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 07 Dec 2010 14:13:13 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.59,312,1288594800"; d="py'?scan'208";a="634112994" Received: from doubt.jf.intel.com (HELO [10.24.142.240]) ([10.24.142.240]) by fmsmga002.fm.intel.com with ESMTP; 07 Dec 2010 14:13:13 -0800 Message-ID: <4CFEB16A.1010507@linux.intel.com> Date: Tue, 07 Dec 2010 14:12:58 -0800 From: Darren Hart User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.12) Gecko/20101027 Lightning/1.0b2 Thunderbird/3.1.6 MIME-Version: 1.0 To: "poky@yoctoproject.org" Cc: "Purdie, Richard" Subject: RFC: Undocumented Recipe Variables Script X-BeenThere: poky@yoctoproject.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Poky build system developer discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Dec 2010 22:13:14 -0000 X-Groupsio-MsgNum: 1028 Content-Type: multipart/mixed; boundary="------------070703000000000604030007" --------------070703000000000604030007 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Per Alex's suggestion, I whipped up a script to find variables in recipes and determine if they have been documented. The script is attached and feedback is welcome. It searches for [A-Z_]+ sequences, building a unique set, and then searches the documentation for those variable names. It allows you to specify any number of meta directories and any number of documentation files. Its weakness is, obviously, that it is unable to determine which variables are relevant only in a given recipe. Although, I guess that is fair, as new developers may suffer from the same lack of context. Given the high false-positive rate, perhaps the best use of this script would be to have someone intimately familiar with the guts of bitbake to scan the list of undocumented variables and indicate which of those should indeed be documented. Scott, are there additional documentation files I should include to be searched for documentation of the harvested variables? Consider the following: $ ./bbvars.py -m ~/source/poky.git/meta -d ~/source/poky.git/documentation/poky-ref-manual/ref-variables.xml Found 1445 undocumented bb variables (out of 1552): ABI AC ACCESS ACLOCAL_CWFLAGS ACPI ACX AC_REQUIRE ADD_BT ADD_WIFI AFTER AI AKM ALLOWOPTIONS ALLOW_EMPTY ALLOW_EMPTY_ ALSA ALTERNATIVE_LINK ALTERNATIVE_LINKS ALTERNATIVE_NAME ALTERNATIVE_PATH ALTERNATIVE_PRIORITY ALTNAME AM_GLIB_GNU_GETTEXT AM_GNU_GETTEXT APACHE_MIRROR API APM APPDESKTOP APPEND APPIMAGE APPNAME APR APT_CONFIG AR ARCH ARCH_FLAGS_FOR_TARGET ARFLAGS ARM_INSTRUCTION_SET ARM_MUTEX ART_CONFIG AS ASN ASNEEDED ASSUME_PROVIDED ASSUME_SHLIBS ATA ATM AUTHORS AUTOLOGIN AUTOTOOLS_STAGE_PKGCONFIG AUTOV AUTO_LIBNAME_PKGS AUTO_SYSLINUXCFG AUTO_SYSLINUXMENU AUX_OBJ AV AWKPOSTINSTSCRIPT BASEDIR BASEFILESISSUEINSTALL BASEPKG_HOST_SYS BASEPKG_TARGET_SYS BASEPN BASE_CONF BASE_PACKAGE_ARCH BASE_SRC_URI BBCLASSEXTEND BB_CURRENTTASK BB_DEFAULT_TASK BB_HASHCHECK_FUNCTION BB_HASHFILENAME BB_MIN_VERSION BB_RUNTASK BB_SCHEDULER BB_TASKHASH BB_VERSION BB_WORKERCONTEXT BE BINARY_LOCALE_ARCHES BINCONFIG_GLOB BINDIR BINS BINV BJAM_EXTRA BJAM_OPTS BJAM_TOOLS BLOCKS BOOST_LIBS BOOST_P BOOTDD_EXTRA_SPACE BOOTDD_VOLUME_ID BOOTIMG_EXTRA_SPACE BOOTIMG_VOLUME_ID BOOTSTRAP BP BROKEN BSD BSP BUGS BUGTRACKER BUG_ON BUILD BUILDCC BUILDCFLAGS BUILDDIR BUILDING BUILDNAME BUILDSDK_CFLAGS BUILDSDK_CPPFLAGS BUILDSDK_LDFLAGS BUILDSPEC BUILD_AR BUILD_ARCH BUILD_CC BUILD_CCLD BUILD_CC_ARCH BUILD_CFLAGS BUILD_CPPFLAGS BUILD_CXX BUILD_CXXFLAGS BUILD_IMAGES_FROM_FEEDS BUILD_LD BUILD_LDFLAGS BUILD_OPT BUILD_OS BUILD_PREFIX BUILD_RANLIB BUILD_SHARED BUILD_SYS BUILD_VENDOR CACHE CC CCACHE CCDC CCDV CCFLAGS CCLD CC_FOR_BUILD CD CDT CET CFGL CFLAGS_ CFLAGS_FOR_BUILD CGI CHAT CHECKCOMMAND_ CHRPATH_BIN CHRPATH_BIN_ CHSRC CLEANFILES CLEANFUNCS CMAKE_CXX_COMPILER CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_C_COMPILER CMAKE_C_FLAGS CMAKE_C_FLAGS_RELEASE CMAKE_FIND_ROOT_PATH CMAKE_FIND_ROOT_PATH_MODE_INCLUDE CMAKE_FIND_ROOT_PATH_MODE_LIBRARY CMAKE_FIND_ROOT_PATH_MODE_PROGRAM CMAKE_MAJOR_VERSION CMAKE_MODULE_PATH CMAKE_SYSTEM_NAME CMDLINE_ CMDLINE_CONSOLE CMX COLORFX COMBINED_FEATURES COMMASPACE COMMERCIAL_AUDIO_PLUGINS COMMERCIAL_LICENSE COMMERCIAL_QT COMMERCIAL_VIDEO_PLUGINS COMPATIBLE_HOST COMPILE CONFFILES CONFFILES_ CONFIG CONFIGURATION CONFIGUREOPTS CONFIGURE_AC CONFIGURE_ARGS CONFIGURE_FLAGS CONFIG_LOCALVERSION CONFIG_MMC_BLOCK CONFIG_MMC_OMAP_HS CONFIG_MODULES CONFIG_OMAP_LL_DEBUG_UART CONFIG_OMAP_LL_DEBUG_UART_EXT CONFIG_OUT CONFLICTNAME CONFLICTS CONFLICTS_ CONF_VERSION CONTENT CONTROL COPTS COPYING COPYRIGHT CORE CORYING CPAN CPAN_BUILD_DEPS CPP CPPFLAGS CPPI CR CROSS CROSS_COMPILE CROSS_DIR CSI CSPI CSS CST CT CTAN CURLGNUTLS CURLGNUTLS_ CURSES CVE CWAUTOMACROSPREFIX CXX CXXFLAGS CXXFLAGS_ DA DATADIR DATE DATETIME DAV DB DBUS DBUS_SESSION_BUS_ADDRESS DCMAKE_INSTALL_PREFIX DCMAKE_INSTALL_SO_NO_EXE DCMAKE_TOOLCHAIN_FILE DCMAKE_VERBOSE_MAKEFILE DDAEMON_UMASK DEBIAN DEBIANNAME_ DEBIAN_MIRROR DEBIAN_NAMES DEBIAN_NOAUTONAME_ DEBUG DEBUG_LL DEB_PACKAGE_INDEX_CLEAN DEFAULT DEFAULT_PREFERENCE_ DENABLE_DNS DEPCHAIN_POST DEPCHAIN_PRE DEPENDENCY_CHECK DEPENDPATH DEPENDS_ DEPENDS_GETTEXT DEPLOYDIR DEPLOY_DIR DEPLOY_DIR_DEB DEPLOY_DIR_IMAGE DEPLOY_DIR_IPK DEPLOY_DIR_RPM DEPLOY_DIR_SRC DEPLOY_DIR_TAR DEPLOY_KEEP_PACKAGES DEPMOD DER DESCRIPTION_ DESCRIPTON DEVEL_PREFIX DFACILITY DHAVE_ANIMATION DHAVE_STRERROR DHAVE_WEAKSYMS DHCP DHOSTS_ACCESS DHOSTS_ALLOW DHOSTS_DENY DIGIT DINET DISCLAIMER DISPC_VID_FIR DISPLAY DISTRO_EXTRA_DEPENDS DISTRO_SSH_DAEMON DISTUTILS_BUILD_ARGS DISTUTILS_INSTALL_ARGS DISTUTILS_STAGE_ALL_ARGS DISTUTILS_STAGE_HEADERS_ARGS DKILL_IP_OPTIONS DLIB DLINK_SIZE DM DMA DNDEBUG DNETGROUP DNS DO DOCS DOLT DONE DOS DOSRC DPI DPKG_ARCH DPKG_ARCH_ DPM DPROCESS_OPTIONS DPTC DRI DRPM_VENDOR_WINDRIVER DSI DSO DSP DSS DSYS_ERRLIST_DEFINED DUSE_GETDOMAIN DVF DVFS DWITHOUT_XATTR DWITH_GNOME DWITH_KDE DWITH_MOZJS DWITH_NM DWITH_PERL DWITH_PYTHON DWITH_WEBKIT D_FILE_OFFSET_BITS D_GNU_SOURCE D_REENTRANT D__FILE_OFFSET_BITS D__MIPSEB__ D__MIPSEL__ D__SOFTFP__ ED EDID EDL EDS EDT EET EGLIBC_BRANCH ELF ELFF END ENGR ENHANCED_IMAGE_FEATURES ENOENT EOF EPL ERR ERROR ERROR_NAMES EST ETCDIR EVENTLOG EVIE EVM EXCEPTION EXCLUDE_FROM EXCLUDE_FROM_SHLIBS EXCLUDE_FROM_WORLD EXIF EXPAT EXPATINCPATH EXPATLIBPATH EXPORT_FUNCTIONS EXTENDPV EXTERN EXTERNAL_TOOLCHAIN EXTRAOPKGCONFIG EXTRAS EXTRA_AUTORECONF EXTRA_CFLAGS EXTRA_CPANFLAGS EXTRA_DIST EXTRA_IMAGEDEPENDS EXTRA_NATIVE_PKGCONFIG_PATH EXTRA_OECONF_ EXTRA_OEMAKE_ EXTRA_OEMAKE_NETGROUP EXTRA_OEMAKE_NETGROUP_ EXTRA_QMAKEVARS_POST EXTRA_QMAKEVARS_PRE EXTRA_RDEPENDS EXTRA_RDEPENDS_ EXTRA_SIPTAGS FACILITY FAIL FAILURE FAKEROOT FAKEROOTENV FAM FAT FATAL FB FC_GLYPHNAME FC_LANG FDL FEAT FEATURES FEC FEED_URIS FF FILE FILEMANAGER FILEMANAGER_ FILERDEPENDSFLIST FILERDEPENDSFLIST_ FILERDEPENDS_ FILERPROVIDESFLIST FILERPROVIDESFLIST_ FILERPROVIDES_ FILESDIR FILESEXTRAPATHS FILESPATH FILESPATHBASE FILESPATHPKG FILES_ FILE_DIRNAME FINISHED FIR FIXEDSRCDATE FIXMESTAGINGDIR FLAC FLIST FLIST_ FONTREV FREEDESKTOP_CVS FS FSL FTL FULL_OPTIMIZATION_ F_OK GB GBARR GC GCONF_CONFIG_SOURCE GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL GCONV_PATH GD GDB GDBPROPREFIX GDK GDK_PIXBUF_MODULEDIR GFDL GIT_CONFIG GIT_CORE_CONFIG GIT_PROXY_COMMAND GIT_PROXY_IGNORE GL GLEW GLIBC_ADDONS GLIBC_BROKEN_LOCALES GLIBC_DEPENDENCIES GLIBC_EXTRA_OECONF GLIBC_GENERATE_LOCALES GLIBC_INTERNAL_USE_BINARY_LOCALE GLSL_CL GMAE GMP GMT GNOME GNOME_MIRROR GNU_HASH GNU_MIRROR GO GP GPE_MIRROR GPGME GPIO GPIO_POWERON GPL GPL_V GPS GR GROFF_FONT_PATH GROFF_TMAC_PATH GRUB GS GSSDP GTK GTK_ GUP HACK HAL_INFO_ HANDHELDS_CVS HASDOCBOOK HCI HDDDIR HDDIMG HEAD HEADERS HNP HOME HOST HOSTPERL HOSTPGEN HOSTPYTHON HOSTTOOLS_WHITELIST_ HOST_AR HOST_ARCH HOST_AR_KERNEL_ARCH HOST_CC HOST_CC_ARCH HOST_CC_KERNEL_ARCH HOST_CFLAGS HOST_CXX HOST_CXXFLAGS HOST_DATA HOST_LDFLAGS HOST_LD_KERNEL_ARCH HOST_LIBIDL_CFLAGS HOST_LIBIDL_CONFIG HOST_LIBIDL_LIBS HOST_NONSYSV HOST_OS HOST_PREFIX HOST_RANLIB HOST_SYS HOST_VENDOR HOTPLUG HST HTML HTTP IAPI IBM ICE ICECC_CC ICECC_CXX ICECC_ENV_EXEC ICECC_PATH ICECC_USER_CLASS_BL ICECC_USER_PACKAGE_BL ICECC_VERSION ID IDE IDL IDN IDNA IETF IFS IGEP II IMAGE IMAGEROOTFS IMAGETEST IMAGE_BASENAME IMAGE_CMD_ IMAGE_DEPENDS_ IMAGE_DEVICE_TABLE IMAGE_DEVICE_TABLES IMAGE_LINGUAS IMAGE_LINK_NAME IMAGE_LOCALES IMAGE_NAME IMAGE_OVERHEAD_FACTOR IMAGE_PKGTYPE IMAGE_POSTPROCESS_COMMAND IMAGE_PREPROCESS_COMMAND IMAGE_ROOTFS IMAGE_ROOTFS_SIZE IN INCDIR INCL INCLUDEDIR INCLUDEPATH INCLUDES INCOMPATIBLE_LICENSE INC_PR INFO INHIBIT_AUTOTOOLS_DEPS INHIBIT_AUTO_STAGE INHIBIT_DEFAULT_DEPS INIT INITRD INITSCRIPT_PARAMS_ INIT_D_DIR INSANE_SKIP_ INSTALL INSTALLED_PACKAGES INSTALLROOT INSTALL_DIR INSTALL_HDR_PATH INSTALL_INC INSTALL_LIB INSTALL_MAN INSTALL_MOD_PATH INSTALL_ROOT INS_BASE INTERFACES INTERN INVALID IO IOE IOEINCDIR IP IPC IPKGCONF_SDK IPKGCONF_TARGET IPKG_ARGS IPKG_HOST IPKG_OFFLINE_ROOT IPKG_TARGET IPK_FEED_URIS IPK_PACKAGE_INDEX_CLEAN IPU IRC IROOT IRQ ISC ISO ISODIR ISP JFIF JL JPEG JS_EDITLINE KBRANCH KDIR KERNEL KERNELDIR KERNELORG_MIRROR KERNEL_ALT_IMAGETYPE KERNEL_AR KERNEL_ARSUFFIX KERNEL_CC KERNEL_CCSUFFIX KERNEL_CONSOLE KERNEL_FEATURES KERNEL_IMAGEDEST KERNEL_IMAGE_BASE_NAME KERNEL_IMAGE_MAXSIZE KERNEL_IMAGE_SYMLINK_NAME KERNEL_LD KERNEL_LDSUFFIX KERNEL_LOCALVERSION KERNEL_MAJOR_VERSION KERNEL_OBJECT_SUFFIX KERNEL_OUTPUT KERNEL_PATH KERNEL_PRIORITY KERNEL_RELEASE KERNEL_REVISION_CHECKING KERNEL_SOURCE KERNEL_SRC KERNEL_VERSION KEXECTOOLS KEXECTOOLS_ KILL_OPT KMACHINE KMACHINE_ KV LABEL LABELS LAME LAN LAYER_CONF_VERSION LCD LCONF_VERSION LCRYPT LC_ALL LD LDFLAGS LDFLAGS_ LD_ LD_LIBRARY_PATH LD_PRELOAD LEAD_SONAME LESSER LGPL LGPL_EXCEPTION LGPV LIB LIBATA LIBC LIBC_DEPENDENCIES LIBDIR LIBNAMES LIBRARY LIBS LIBTOOL LIBV LIB_DEPS LIB_FILES_CHKSUM LICENCE LICENSE_ LICENSING LIC_CHKSUM_FILES LIC_FILE_CHKSUM LINGUAS_INSTALL LINKFILE LINK_FOR_BUILD LINUX_KERNEL_TYPE LINUX_VERSION LINUX_VERSION_EXTENSION LOCAL LOCALEDEF LOCALE_GENERATION_WITH_CROSS LOCALE_UTF LOCALPATCH LOCALSRC LOELIBDIR LOG_DAEMON LOG_DIR LOG_FILE LOG_INFO LOPTS LR LSB LSB_VERSION LSOF_INCLUDE LSOF_OS LSOF_OS_ LTT LTTDATE LVDS LZMA MAC MACHINE_ARCH MACHINE_ESSENTIAL_EXTRA_RDEPENDS MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS MACHINE_POSTPROCESS_COMMAND MAINTAINERS MAJOR_KERNEL_VERSION MAJOR_VERSION MAJ_VER MAKE MAKEFLAGS MAKE_ARCH MAKE_OS MAKE_TARGETS MANDIR MANIFEST MANS MARK MATCH MAX MB MBO MC MCW MD MDT MET METADATA_BRANCH METADATA_REVISION MFD MIDI MIME MIRRORS MIRRORS_ MIT MMC MMU MNCI MNRT MODULES MOD_PV MOZCONFIG MOZ_OBJDIR MP MPC MPEG MPL MS MST MULTIMACH_ARCH MULTIMACH_HOST_SYS MULTIMACH_TARGET_SYS MUTEX MUTEX_ MUX MX MXC MXC_DMA_ZONE_SIZE NAK NAME NAND NAPI NATIVE_INSTALL_WORKS NCMS NEEDED NET NETGROUP NETWORK_MANAGER NEW NEWS NFS NMEA NO NOISO NONE NOOPR NORESULT NOSWABBERUPDATE NOT NOTE NOTES NOW NPATH NPL NSS NZ OBJ OBJCOPY OBJDUMP ODBM_F OE OECMAKE_BUILDPATH OECMAKE_CXX_COMPILER OECMAKE_CXX_FLAGS OECMAKE_CXX_FLAGS_RELEASE OECMAKE_C_COMPILER OECMAKE_C_FLAGS OECMAKE_C_FLAGS_RELEASE OECMAKE_SITEFILE OECMAKE_SOURCEPATH OEDATADIR OEDEBUG OEEXECPREFIX OEINCDIR OELAYOUT_ABI OELIBDIR OEPREFIX OEREV OES_BITBAKE_CONF OEV OE_BINCONFIG_EXTRA_MANGLE OE_QMAKE_AR OE_QMAKE_CC OE_QMAKE_CFLAGS OE_QMAKE_CXX OE_QMAKE_CXXFLAGS OE_QMAKE_INCDIR_QT OE_QMAKE_LDFLAGS OE_QMAKE_LIBDIR_QT OE_QMAKE_LIBS_QT OE_QMAKE_LIBS_X OE_QMAKE_LINK OE_QMAKE_LRELEASE OE_QMAKE_LUPDATE OE_QMAKE_MOC OE_QMAKE_PLATFORM OE_QMAKE_QDBUSCPP OE_QMAKE_QDBUSXML OE_QMAKE_QMAKE OE_QMAKE_RCC OE_QMAKE_RPATH OE_QMAKE_STRIP OE_QMAKE_UIC OE_REVISION OFFLINE_ROOT OFFSET OHCI OLD OLDEST_KERNEL OLD_BASE_PACKAGE_ARCH OLD_MULTIMACH_ARCH OLD_PACKAGE_ARCH OM OMAP OMAPFB OMAPZ ONLY OP OPENMOKO_MIRROR OPENMOKO_RELEASE OPKG OPKGBUILDCMD OPKG_INIT_POSITION OPKG_INIT_POSITION_ OPKG_OFFLINE_ROOT OPKG_POSTPROCESS_COMMANDS OPKG_PREPROCESS_COMMANDS OPSYS OPT OPT_GNUTLS ORIGIN ORIG_DEPENDS ORIG_RDEPENDS OS OSE OSL OTG OTGSC_IE_ OUT OUTSPECFILE OV OVERRIDES OVERRIDES_ OWL_ PACKAGE PACKAGEFUNCS PACKAGELOCK PACKAGES_ PACKAGES_DYNAMIC PACKAGES_TO_INSTALL PACKAGE_ARCHS PACKAGE_ARCH_ PACKAGE_DEPENDS PACKAGE_INSTALL PACKAGE_INSTALL_ATTEMPTONLY PACKAGE_NO_GCONV PACKAGE_NO_LOCALE PACKAGE_PREPROCESS_FUNCS PAM PARALELL_MAKE_ PARALLEL_MAKE_ PASS PASTHRU_INC PATA PATA_FSL PATCHCLEANCMD PATCHCMD PATCHDEPENDENCY PATCHING PATCHRESOLVE PATCHTOOL PATCH_DEPENDS PATHFIXPATCH PATHFIXPATCH_ PATH_ PAUSE PC PCI PCI_CONF_FLAG PCMCIA PCMCIA_MANAGER PCRE PD PDT PERL PERLCONFIGTARGET PERLHOSTLIB PERLLIBDIRS PERL_ARCHLIB PERL_INC PERL_LIB PF PG PIC PID PIE PIPE PKG PKGD PKGDATA_DIR PKGDEST PKGDESTWORK PKGFN PKGHIST_DIR PKGWRITEDIRDEB PKGWRITEDIRIPK PKGWRITEDIRRPM PKG_ PKG_CONFIG PKG_CONFIG_DIR PKG_CONFIG_PATH PKG_CONFIG_SYSROOT_DIR PKG_DISTRIBUTECOMMAND PKG_DISTRIBUTEDIR PKG_DIST_LOCAL PL PNG POKY POKYBASE POKY_BASE_INSTALL POKY_CONF_VERSION POKY_DISTRO_VERSION POKY_NATIVE_SYSROOT POKY_TARGET_SYSROOT POSIX POST POSTIN POSTINPROG POTFILES PPP PRC PREBUILT_CPUCFG PREFERRED_PROVIDER_ PREFIX PREMIRRORS PREMIRRORS_ PREPROCESS_RELOCATE_DIRS PRINC PRINT PRINTING PRIORITY PRIVATE_LIBS PROFILES PROMPT PROTO_DEPS PROVIDES PROVIDES_ PRV PR_ PS PSEUDO_RELOADED PSF PST PSTAGING_ACTIVE PSTAGING_DISABLED PVM PWD PXA PYTHONPATH PYTHON_BASEVERSION PYTHON_DIR PYTHON_MAJMIN QA QA_LOGFILE QEMU QEMUARCH QEMUIMAGETESTS QEMUTARGET QEMU_OPTIONS QEMU_OPTIONS_ QMAKESPEC QMAKE_MKSPEC_PATH QMAKE_PROFILES QMAKE_VARSUBST_POST QMAKE_VARSUBST_PRE QPL QTDEMOS QTDEMOS_ QT_CONFIG_FLAGS QUILTRCFILE QUILT_PATCHES RADIUS RAID RANLIB RCONFLICTS_ README REAL_DAEMON_DIR RECIPE_COMMENTS RECIPE_INTEL_SECTION RECIPE_LATEST_RELEASE_DATE RECIPE_LATEST_VERSION RECIPE_MAINTAINER RECIPE_NO_UPDATE_REASON RECIPE_STATUS RECIPE_TIME_BETWEEN_LAST_TWO_RELEASES RECOMMENDS RELEASE REPORTSTAMP RFC RMWORK_ORIG_TASK ROC ROK ROM ROOT ROOTFS ROOTFSBLOCKS ROOTFS_PKGMANAGE ROOTFS_PKGMANAGE_BOOTSTRAP ROOTFS_POSTINSTALL_COMMAND ROOTFS_POSTPROCESS_COMMAND ROOTFS_SIZE ROOT_ RPATH RPC RPM RPMBUILD RPMBUILDPATH RPMDEPS RPMOPTS RPM_POSTPROCESS_COMMANDS RPM_PREPROCESS_COMMANDS RPROVIDES RPROVIDES_ RPSRC RRECOMMENDS_ RREPLACES_ RSUGGESTS RSZ RTC RUNNING RUNTIME RUNTIME_ RUNTIME_PREFIX RX R_OK SANITY_ABIFILE SATA SATO_IMAGE_FEATURES SBINDIR SCCS SCENEFUNCS SCHEMA SCHEMA_FILES SCHEMA_LOCATION SCONF_VERSION SCRIPT SCSI SD SDC SDI SDIO SDK SDKMACHINE SDKPATH SDKPATHNATIVE SDKTARGETSYSROOT SDK_ARCH SDK_CC_ARCH SDK_DEPLOY SDK_DIR SDK_NAME SDK_OS SDK_OUTPUT SDK_PREFIX SDK_VENDOR SDL SDMA SDP SECTION_ SEL SEVERITY SGX SH SHA SHARED SHAREDIR SHELL SHLIBSDIR SHLIBSWORKDIR SIGNATURE SIGPIPE SIG_DFL SIM SIPTAGS SIP_FEATURES SIP_MODULES SITE SITECONFIG_SYSROOTCACHE SITE_CONF_VERSION SIZE SKIP SKIPPING SM SMTP SOLIBS SOLIBSDEV SONAME SOURCEFORGE_MIRROR SOURCES SOURCE_MIRROR_FETCH SPECFILE SPECS SPI SPLASH SRC SRCDATE_ SRCNAME SRCPV SRCREV_ SRCREV_FORMAT SRC_DISTRIBUTECOMMAND SRC_DISTRIBUTEDIR SRC_DIST_LOCAL SRC_URI_ SREC_CMD SREC_SKIP SREC_VMAADDR SRPMFILE SSDP SSH SSTATETASKS SSTATE_BUILDDIR SSTATE_DIR SSTATE_INSTDIR SSTATE_MANFILEBASE SSTATE_MANFILEPREFIX SSTATE_MANIFESTS SSTATE_MIRRORS SSTATE_PKG SSTATE_PKGARCH SSTATE_PKGNAME SSTATE_SCAN_CMD SSTATE_VERSION STAGE_TEMP STAGING_BINDIR STAGING_BINDIR_CROSS STAGING_BINDIR_NATIVE STAGING_BINDIR_TOOLCHAIN STAGING_DATADIR STAGING_DATADIR_NATIVE STAGING_DIR STAGING_DIR_HOST STAGING_DIR_NATIVE STAGING_DIR_TARGET STAGING_ETCDIR_NATIVE STAGING_EXECPREFIXDIR STAGING_INCDIR STAGING_INCDIR_NATIVE STAGING_LIBDIR STAGING_LIBDIR_NATIVE STAGING_SIPDIR STAMP STARTING STOP STRING STRIP STRIPPROG STYLE ST_MODE SU SUBDIR SUBDIRS SUCC SUCCESS SUPPORTED SVG SVGA SVNREV SWABBER_LOGS SWABBER_REPORT SWAB_ORIG_TASK SWLINUX SYSLINUXCFG SYSLINUXMENU SYSLINUX_OPTS SYSLINUX_TIMEOUT SYSROOT_DESTDIR SYSROOT_LOCK SYSROOT_PREPROCESS_FUNCS SYSTEMHEADERS SYSTEMLIBS SYSV SYSVINIT_ENABLED_GETTYS SYS_INCLUDES S_IEXEC S_IREAD S_IRWXU S_ISDIR S_ISLNK S_ISREG S_IWRITE TABLES TARGET TARGETARCH TARGETFPU TARGETOS TARGET_AR_KERNEL_ARCH TARGET_CC_ARCH TARGET_CC_ARCH_ TARGET_CC_KERNEL_ARCH TARGET_CPPFLAGS TARGET_LDFLAGS TARGET_LD_KERNEL_ARCH TARGET_OS_ORIG TARGET_PREFIX TARGET_SYS TARGET_VENDOR TCP TEMPLATE TERMWINDOWTITLE TEST_DIR TEST_LOG TEST_RESULT TEST_SCEN TEST_TMP THISDIR TIFF TIMEOUT TINDERBOX TINDER_AUTOBUILD TINDER_BRANCH TINDER_CLOBBER TINDER_HOST TINDER_LOG TINDER_MACHINE TINDER_REPORT TINDER_TREE TINDER_URL TKSRC TLI TMAKEPATH TMAKE_CONFIG TMAKE_DEPENDPATH TMAKE_DESTDIR TMAKE_HEADERS TMAKE_INCLUDEPATH TMAKE_INTERFACES TMAKE_LIBS TMAKE_PROFILES TMAKE_SOURCES TMAKE_TARGET TMAKE_TEMPLATE TMIO TMP TMP_LOCALE TO TOBUILD TODO TOOLCHAIN_HOST_TASK TOOLCHAIN_OPTIONS TOOLCHAIN_OUTPUTNAME TOOLCHAIN_TARGET_SDKTASK TOOLCHAIN_TARGET_TASK TOP TOPDIR TOTALSIZE TRACE_LOGDIR TRACE_LOGFILE TTF TWL TX TXCSR TXDMA TXT TZ TZONES UBOOT_ARCH UBOOT_ENTRYPOINT UBOOT_LOADADDRESS UBOOT_MACHINE_ UCLIBC_BASE UCS UCT UDC UDEV_EXTRAS UE UMASK UNDEFINED UNIX UP UPDATE URB URI URL US USAGE USB USBCV USBH USERPTR USE_DEVFS USE_NLS USE_NLS_ USE_VT UST UTC UTF VERSION VFS VIDIOC_QUERYMENU VIRTUAL VIRTUAL_NAME VIRTUAL_NAME_ VM VMW VNC VOLTAGE_ VPATH VPU VP_CLK_RATIO VR VRAM VRFB VSYSLOG VUSB WARNING WEB WEB_ WET WHITELIST_ WITH_ENCA WM W_OK XAUTHORITY XC XCB XCFLAGS XDG XF XFCE_VERSION XI XIG XINC XIP XK XKB XLDFLAGS XLIB XLIBS_CVS XORG_MIRROR XORG_PN XSERVER XSETTINGS XSLT XSUB XT XT_CFLAGS XV X_OK YES YUV ZAURUS_UPDATER_VERSION ZIP ZLIB ZY _A _ARM _BCM _BD _C _CID_AUTO_WHITE_BALAN _CONFIG _CONSOLE_SERIAL_PORT _CR _DATA _ER _ET _HEADERS _IMAGE_FEATURES _IN _K _L _LIST _LTLIBRARIES _M _MANS _MN _MTN _O _OLPC _ONLY _OPT _P _PROG_INTLTOOL _SCRIPTS _SENDMAIL _T _TEXINFOS _TIMEOUT _TIMER _TO _TR _USE_SYSTEM_EXTENSIONS _WAP_ _WHITELIST_ _WPASUPPLICANT _Y __ __RUNQUEUE_DO_NOT_USE_EXTERNALLY -- Darren Hart Yocto Linux Kernel --------------070703000000000604030007 Content-Type: text/x-python; name="bbvars.py" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="bbvars.py" #!/usr/bin/env python # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # Copyright (C) Darren Hart , 2010 import sys import getopt import os import os.path import re def usage(): print 'Usage: %s -d FILENAME [-d FILENAME]* -m METADIR [-m MATADIR]*' % os.path.basename(sys.argv[0]) print ' -d FILENAME documentation file to search' print ' -h, --help display this help and exit' print ' -m METADIR meta directory to search for recipes' def recipe_bbvars(recipe): ''' Return a unique set of every bbvar encountered in the recipe ''' prog = re.compile("[A-Z_]+") bbvars = set() try: r = open(recipe) except IOError as (errno, strerror): print 'WARNING: Failed to open recipe ', recipe print strerror for line in r: # Strip any comments from the line line = line.rsplit('#')[0] bbvars = bbvars.union(set(prog.findall(line))) r.close() return bbvars def collect_bbvars(metadir): ''' Walk the metadir and collect the bbvars from each recipe found ''' bbvars = set() for root,dirs,files in os.walk(metadir): for name in files: if name.find(".bb") >= 0: bbvars = bbvars.union(recipe_bbvars(os.path.join(root,name))) return bbvars def bbvar_is_documented(var, docfiles): prog = re.compile(".*($|[^A-Z_])%s([^A-Z_]|$)" % (var)) for doc in docfiles: try: f = open(doc) except IOError as (errno, strerror): print 'WARNING: Failed to open doc ', doc print strerror for line in f: if prog.match(line): return True f.close() return False def main(): docfiles = [] metadirs = [] bbvars = set() undocumented = [] # Collect and validate input try: opts, args = getopt.getopt(sys.argv[1:], "d:hm:", ["help"]) except getopt.GetoptError, err: print '%s' % str(err) usage() sys.exit(2) for o, a in opts: if o in ('-h', '--help'): usage() sys.exit(0) elif o == '-d': if os.path.isfile(a): docfiles.append(a) else: print 'ERROR: documentation file %s is not a regular file' % (a) sys.exit(3) elif o == '-m': if os.path.isdir(a): metadirs.append(a) else: print 'ERROR: meta directory %s is not a directory' % (a) sys.exit(4) else: assert False, "unhandled option" if len(docfiles) == 0: print 'ERROR: no docfile specified' usage() sys.exit(5) if len(metadirs) == 0: print 'ERROR: no metadir specified' usage() sys.exit(6) # Collect all the variable names from the recipes in the metadirs for m in metadirs: bbvars = bbvars.union(collect_bbvars(m)) # Check each var for documentation for v in bbvars: if not bbvar_is_documented(v, docfiles): undocumented.append(v) undocumented.sort() # Report all undocumented variables print 'Found %d undocumented bb variables (out of %d):' % (len(undocumented), len(bbvars)) for v in undocumented: print v if __name__ == "__main__": main() --------------070703000000000604030007--