[ANNOUNCE] src2pkg-2.4 released

Under development: PCMCIA, wireless, etc.
Message
Author
amigo
Posts: 2629
Joined: Mon 02 Apr 2007, 06:52

[ANNOUNCE] src2pkg-2.4 released

#1 Post by amigo »

A new release of src2pkg is out. You can get the pet package of it here:
http://distro.ibiblio.org/pub/linux/dis ... arch-1.pet

After installing, open a terminal and run:
'src2pkg --setup'
This step will compile and install the latest version of the src2pkg-helpers which are used to create packages with.

For those who don't know, src2pkg is a complete solution for the creation of pet packages (or *.rpm, *.deb, *.tgz or *.taz). It provides a one-step method for creating packages from many types of sources and is the most complete and versatile packager around. Typical use for Puppy is like this:
src2pkg -PET path-or-url-to-source-archive

It can also do lots of tweaking of your package -stripping bins and libs, compressing bins, splitting packages, verifying the files, etc.

big_bass
Posts: 1740
Joined: Mon 13 Aug 2007, 12:21

#2 Post by big_bass »

Hey Gilbert

thanks for the new release
I got this messages so I know other people
will get the same message
I havent poked in the code to to see line 205
because everything installed correctly

puppypc ~ # src2pkg --setup
/usr/bin/src2pkg: line 205: wxport: command not found

P.S. I used the tgz version on your site src2pkg-2.4-noarch-1.tgz

I want to thank you again for this app and the logical way to build packages I am your #1 supporter here

and I know that the package is what makes for a logical
distro (having build scripts)

stick to your guns Gilbert !!!!
you are right :D

Joe

amigo
Posts: 2629
Joined: Mon 02 Apr 2007, 06:52

#3 Post by amigo »

Nice find, Joe. Funny I haven't seen that error myself. It's supposed to be 'export', of course. You can simply change it for now. DO let me know if you see anything funny -I did some coding on src2pkg on a different system awhile back and the mouse wheel was doing funny things like pasting clipboard contents as I scrolled over lines. This one looks like a simple typo though. One Slackware user has reported that the core-utils component of src2pkg is not building on Slackware64, but it built fine here on my openSuSE 64-bit system. I have downloaded slack64, but haven't had a chance to set it up yet, so I can check those builds directly and not have to rely on users feedback.

Thaks to you, Joe, for just being you!

User avatar
jemimah
Posts: 4307
Joined: Wed 26 Aug 2009, 19:56
Location: Tampa, FL
Contact:

#4 Post by jemimah »

I'm trying to set this up as part of my DevX, and configuring src2pkg-dnd so non-expert users can use it.

This is what I've got so far for default settings and it seems to work ok.

Code: Select all

ARCHIVE_OPTIONS='-A -Q -VV -PET2 --splitpkg=devel,nls,doc'
Are there other flags you would recommend using as well?

amigo
Posts: 2629
Joined: Mon 02 Apr 2007, 06:52

#5 Post by amigo »

That looks okay to me -you could add '-I' if you want it to beahve like gentoo's 'emerge' :D

I actually use two drag-n-drops on my desktop. There is both a ROX-Filer AppDir in the examples (src2pkg-dnd.tar.bz2) and a simple script src2pkg-dnd.sh. I have one setup so that it simply produces a recipe for the build, using these options:
ARCHIVE_OPTIONS='-N -Q -V'
Dropping a source archive on it just creates the NAME.src2pkg build script.

For the other one I use:
ARCHIVE_OPTIONS='-A -R'
Actually this one is the AppDir itself, which will setup several default options in $HOME/Choices/src2pkg-dnd

I'll be very interested to know what kind of feedback you get from users. src2pkg uses default options which seem to work pretty well for most (demanding) slack users -even though that means no '-V' debug output. For real noobies, I would probably leave out that option as well as '-Q' (when doing the build. Using -N -Q lets the user correct the NAME and VERSION if they are not deduced correctly. When actually building, the -Q option will cause src2pkg to pause in a few places and accept optional input. For real greenhorns, they may not know how to react anyway.

For my own personal use, I simply drop the archive on the icon for the dnd script which produecs the recipe. Then, I open a terminal where the archibe and new builkd script are and run: 'src2pkg -X'. The minimal output from this makes for an easy visual overview of the build. If there are any problems, I re-run the build adding -V or -VV to see what the problem is.

In my src2pkg.conf file, the main changes I make to the defaults are to always use the CWD for the build dir, the package-tree and the final package. You can actually do that from the command-line with the '-CWD' option -you might add that to your dnd options. Otherwise, everything gets done under /tmp which makes it more tedious to browse through the resulting package-tree or look in the sources if there are problems.

Since you are building pets, you may be interested in some of the space-saving options. A short-cut to several individual options can be had by using SAVE_SPACE -see the option '-Z?' in the man-page or from the extended help output of 'src2pkg -hh'.

Also, you should be aware that src2pkg is pretty easy to extend. You can create an extension which will run before or after any of the main builtin functions(the instruction set). Probably the most likely ccandidate for such an extension for Puppy would be one that would prompt the user to create a desktop file, if none is found for the package. Other possibility is for creating pet *.specs file. When the need comes up, contact me and I'll help you understand that all more -unless you want to look it up in the code. Using extensions is a good way to add to (or subtract from) the standard behaviour without having to re-edit main files when there is a version upgrade. It can also be a good way to develop and test code which you'd like to see included in src2pkg.

I'm thrilled to know that you are using src2pkg and welcome any and all suggestions from you. I have long maintained that using src2pkg would improve puppy immensely as it provides the easiest way *ever* of packaging software, for newbies or advanced users. big_bass has been using it for a long time, although he uses it for slack-style packages.

@ Joe, hopefully you'll have a suggestion or two for Jemimah which may be helpful. Even though you use slack-style packages, you have confronted directly the problems associated with building pkgs for Puppy. For instance, Jemimah may find it useful to set: FHS_POLICY=NONE
in the src2pkg.conf file, since otherwise src2pkg is very strict about the placement of files -particularly it would not allow for anything to be installed unser /root.

Jemimah, all feedback is welcome!

User avatar
jemimah
Posts: 4307
Joined: Wed 26 Aug 2009, 19:56
Location: Tampa, FL
Contact:

#6 Post by jemimah »

Haha, yeah I'm getting too many requests for packages to handle it on my own, so this looks like an ideal way to get people started with compiling. It looks like it has fewer gotchas than the new2dir method which totally fails on cmake, waf, and python installs and doesn't strip libs by default.

Hmm, I would think the pause for input would make things easier, since a fair number of things won't build without explicitly disabling some stuff.

Opening the configure options in an Xterm is not preferable however, since it's not immediately obvious how to increase the scrollback buffer in xterm or how to scroll it. Plus it's headache-inducing non-xft text. I intend to patch it to open defaulttextviewer or something, but if you wanted to make that configurable from the config file, I think that would be a good enhancement for the next version.

I like the idea of an extension to edit the desktop file, as Puppy seems pretty touchy about what desktop files will work. I can possibly figure out how to add this myself.

User avatar
jemimah
Posts: 4307
Joined: Wed 26 Aug 2009, 19:56
Location: Tampa, FL
Contact:

#7 Post by jemimah »

Something looks wrong here with the spliting of packages.

Code: Select all

mv: cannot move `/tmp/gpsd-2.95-i486-1/usr/lib/libgpsd.a' to `/tmp/gpsd-devel-2.95-i486-1/usr/lib/usr/lib/libgpsd.a': No such file or directory
mv: cannot move `/tmp/gpsd-2.95-i486-1/usr/lib/libgps.a' to `/tmp/gpsd-devel-2.95-i486-1/usr/lib/usr/lib/libgps.a': No such file or directory

User avatar
jemimah
Posts: 4307
Joined: Wed 26 Aug 2009, 19:56
Location: Tampa, FL
Contact:

#8 Post by jemimah »

Also waf seems not to work. Jack does compile fine from the command line.

Code: Select all

# src2pkg -PET2 jack-1.9.6.tar.bz2 
Found source archive: jack-1.9.6.tar.bz2
Deleting old build files - Done
Creating working directories:
   PKG_DIR=/tmp/jack-1.9.6-i486-1
   SRC_DIR=/tmp/jack-1.9.6-src-1
Unpacking source archive - Done
Correcting source permissions - Done
Checking for patches - None found
Done
Compiling sources - Using: './waf -j '
ERROR! Compiling source code has failed.
This usually happens because of missing libraries, or
badly written Makefiles or configure scripts.
Sorry! No Dependency or Requirements information found.

amigo
Posts: 2629
Joined: Mon 02 Apr 2007, 06:52

#9 Post by amigo »

Thanks for the feedback. I'll try these out and find the problem.

1: mv: cannot move `/tmp/gpsd-2.95-i486-1/usr/lib/libgpsd.a' to `/tmp/gpsd-devel-2.95-i486-1/usr/lib/usr/lib/libgpsd.a': No such file or directory

See the double /usr/lib path?

2: Compiling sources - Using: './waf -j '
ERROR! Compiling source code has failed.

Use the -VV option to see the complete output. 'waf' usage is nearly completely untested -it was suggested by a src2pkg contrib. But, since it rarely used it is difficult to find sources to test with. Since you've found one it gives me a chance to work out kinks.

I'm gonna produce a quick follow-up release over the next few days and will try to get these two (and any others) problems worked out for inclusion.

As for using -Q, it may be okay and right for your scenario. One thing to keep in mind is that I try to gently encourage users to use a build script whenever anything non-default options are needed for the build. A src2pkg build script provides a very concise record of any special requirements of the build. Also I encourage the use of rpm sources or official debian patches as they provide valuable info and sometimes build options. Using either one will ensure a good description file(when applicable) for the package. And if the -ACF option is used, src2pkg will pull any special configure options from the spec or debian/rules file -which often eliminates the need for manually-entered options from the user. Just things for you to consider... I'm interested in any feedback from your experience and that of your users.

User avatar
jemimah
Posts: 4307
Joined: Wed 26 Aug 2009, 19:56
Location: Tampa, FL
Contact:

#10 Post by jemimah »

Here's the verbose output.

Code: Select all

Compiler Messages:
Usage: waf [options] [commands ...]

* Main commands: configure build install clean dist distclean uninstall distcheck
* Example: ./waf build -j4

waf: error: -j option requires an argument
Midori also uses waf, but compiling webkit might be more than you want to get involved with. :)

I do intend to encourage people to read the documentation. But if the initial configuration does not build a pet when the source is dropped on it, one may conclude src2pkg does not work and give up (That might be why more puppy people are not using it already - the initial learning curve is too steep - that and the fact that xterm in puppy is a symlink to rxvt [which is not src2pkg compatible]). This way you know reading the docs are worth the effort. Certainly a build script will be more convenient if the source does not build the first try.

User avatar
jemimah
Posts: 4307
Joined: Wed 26 Aug 2009, 19:56
Location: Tampa, FL
Contact:

#11 Post by jemimah »

Here is the code for 06-configure_source to use Xdialog instead of xterm to display configure options.

Code: Select all

	if [[ $HAVE_PREFIX_OPTION != 1 ]] || [[ $QUERY_FOR_EXTRA_CONFIGS = "YES" ]] ; then
		if [[ -x $(which Xdialog) ]] ; then
			echo $CYAN"   Notice - "$NORMAL"Showing long options in a separate window."
			( Xdialog --textbox "$HELPFILE" 0 0  & )
		else
			echo $CYAN"   Notice - "$NORMAL"Can't show long options - no xdialog found."
		fi
	elif [[ $SHORTHELPFILE ]] ; then
		if [[ -x $(which Xdialog) ]] ; then
			echo $CYAN"   Notice - "$NORMAL"Showing short options in a separate window."
			( Xdialog --textbox "$SHORTHELPFILE" 0 0  & )
		else
			echo $CYAN"   Notice - "$NORMAL"Can't show short options - no xdialog found."
		fi
	elif [[ $HELPFILE ]] ; then
		if [[ -x $(which Xdialog) ]] ; then
			echo $CYAN"   Notice - "$NORMAL"Showing all available options in a separate window."
			( Xdialog --textbox "$HELPFILE" 0 0  & )
		else
			echo $CYAN"   Notice - "$NORMAL"Can't show available options - no xdialog found."
		fi
	fi

amigo
Posts: 2629
Joined: Mon 02 Apr 2007, 06:52

#12 Post by amigo »

Okay, I've found the line causing the problem with 'splitpkg'. You can quickly fix your installed version there to avoid waiting for the next release. Open /usr/libexec/src2pkg/14-last_minute_details and scroll down to line 542 and change this:

Code: Select all

mv "$PKG_DIR"/$FILE "$PKG_BUILDS_DIR"/$DEVEL_PKG_NAME/$THIS_DIR
to this:

Code: Select all

mv "$PKG_DIR"/$FILE "$PKG_BUILDS_DIR"/$DEVEL_PKG_NAME/$THIS_DIR/$FILE
I'm not sure when that got fouled up as I had the routine well debugged -but I hadn't tried it in a long while

So, gpsd should build fine, but I'm attaching an archive (gpsd-patches) with patches, description file, an icon and corrected desktop files. Just place it next to the sources and it will be unpacked and the contents used.

Here's a copy of my src2pkg.conf file which you may find useful for yourself:

Code: Select all

# /etc/src2pkg/src2pkg.conf Version-2.0
# Gilbert Ashley <amigo@ibiblio.org>

# Only change stuff here that you want to *always* apply.
# Most configuration options are set up with sane defaults
# in the file /usr/libexec/src2pkg/DEFINES.
# This src2pkg.conf file is not required for src2pkg to work
# You can use any src2pkg variable in this file, but it really
# should only be used for options which are non package-specific.
# 
# Individual users can also have their own src2pkg.conf file.
# It should be named .src2pkg.conf and placed in their $HOME directory
# - that is the file should be: ~/.src2pkg.conf
# Since the GLOBAL_CONF file in /etc/src2pkg/src2pkg.conf is read
# afterwards, this gives the system administrator a chance to
# override any risky or unwanted settings by using the proper syntax
# which declares variables unconditionally, like this(without #):
# SRC_BUILDS_DIR="/tmp"  instead of:
# '[[ $SRC_BUILDS_DIR ]] || SRC_BUILDS_DIR="$CWD"'
# SOURCES_DIR=${SOURCES_DIR:-$CWD}
# Signature for line 11 of automatically created slack-desc files
PACKAGER="src2pkg" # Jemimah??
SIGNATURE="Packaged by $PACKAGER"

# SIG is a suffix to BUILD for 'signing' package names
# [[ $SIG ]] || SIG=""

# Uncomment to turn off color prompting
# COLOR_PROMPT="NO"

# Uncomment to always see all ouput from commands
# QUIET="NO"

# specify the program for downloading files 
# wget, rsync, curl and lynx are supported --wget is used by default
# DOWNLOADER=aria2c
# specify options to the downloader program (only for wget or aria2c)
# the options shown are the defaults which are used for wget
# DOWNLOADER_OPTIONS="--tries=3 --timeout=15 -O"

# Do not create md5 schecksums by default
# uncomment if you want src2pkg to create md5 checksums for each package
# CREATE_MD5_CHECKSUM="YES"

## Extended databse features:
## src2pkg can generate files to include in the package which list the package
## dependencies and/or the list of libraries supplied by the package
## Setting EXTENDED_DATABASE="YES" causes both features to be enabled
## Or, they can be controlled individually
# [[ $EXTENDED_DATABASE ]] || EXTENDED_DATABASE="YES"
# Do not generate a PKG_REQUIRED (slack-required) file by default
# uncomment if you want to create slack-required files in the package
# [[ $ADD_REQUIRED_FILE ]] || ADD_REQUIRED_FILE="YES"
# [[ $INCLUDE_DEP_VERSIONS ]] || INCLUDE_DEP_VERSIONS="YES"
# [[ $INCLUDE_BASE_LIBS ]] || INCLUDE_BASE_LIBS=NO

# Do not generate a PKG_PROVIDES (slack-provides) file by default
# uncomment if you want to create slack-provides files in the package
# [[ $ADD_PROVIDES_FILE ]] || ADD_PROVIDES_FILE="YES"
# you can specify the names to use for the 'required' and 'provides' files
# or they will be named 'slack-required' and 'slack-provides' by default
# [[ $PKG_REQUIRED ]] || PKG_REQUIRED='slack-required'
#  [[ $PKG_PROVIDES ]] || PKG_PROVIDES='slack-provides'
# note that the standard Slackware pkgtools does not support these features.
# However, if the files use the default 'slack-*' name this will not cause
# any problems. If you choose another name, installpkg will not remove
# them when the package is installed and will fail to remove the  /install directory
# The 'slack-required' files are used by package managers like slapt-get to
# resolve dependencies when installing packages. The slack-provides
# are only used to provide a complete listing of libraries installed by the package.
# the slack-provides files can only be used with a package installer which
# supports them.

# options for inclusion of src2pkg scripts inside the package
# by default src2pkg build scripts are not included in the package
# if you want them to be included uncomment the next line
[[ $ADD_SRC2PKG_SCRIPT ]] || ADD_SRC2PKG_SCRIPT="YES"
# The default directory for including src2pkg build scripts if ADD_SRC2PKG_SCRIPT="YES"
# By default the scripts are placed in the same directory with the package documents (DOC_DIR)
# opinions vary greatly as to what is the best place to put them if they are included.
# src2pkg provides a directory structure under /user/src/src2pkg where they can be placed
# To use that location, uncomment the following line or edit to your preference for another location
# [[ $SRC2PKG_SCRIPT_DIR ]] || SRC2PKG_SCRIPT_DIR="/usr/src/src2pkg/scripts"
# Do not use program  version numbers by default when placing scripts somewhere besides DOC_DIR
# uncomment the following line to include the version number
# [[ $USE_VERSION_NUMBERS ]] || USE_VERSION_NUMBERS="YES"
# By default, if src2pkg scripts are stored outside of DOC_DIR, do not link to them in DOC_DIR
# uncomment the following line to have links created
# [[ $LINK_SCRIPT_TO_DOC_DIR ]] || LINK_SCRIPT_TO_DOC_DIR="YES"
# Summary: if you don't want src2pkg scripts included in your packages leave all the above commented out
# If you want to include scripts with the documents, uncomment the ADD_SRC2PKG_SCRIPT="YES" line
# If you want to include scripts but in some other location, uncomment the ADD_SRC2PKG_SCRIPT="YES" line
# and edit the SRC2PKG_SCRIPT_DIR line to suit your preferences. The directory given should be a
# base directory where a directory for each program will exist. By default, each directory will be named
# simply with the program NAME. If you want to include the version number in the directory name
# uncomment the USE_VERSION_NUMBERS="YES" line.
# If you are using any directory other than the DOC_DIR and want links to be created in the DOC_DIR
# to the included src2pkg scripts, uncomment the LINK_SCRIPT_TO_DOC_DIR="YES" line

# compatibility options
# src2pkg normally does quite a few checks and corrections to make sure that
# documents, man-pages, info pages and other files are in the 'proper' location
# according to the standard Slackware directory layout. The variable FHS_POLICY
# allows this to be changed or limited. The default setting is FHS_POLICY=SLACK
# setting this to FHS_POLICY=LSB allows for lsb-compliant locations for docs,
# man-pages and info pages. Setting this to FHS_POLICY=NONE allows for
# all files in a package to be located under a single directory. Do not change this
# option unless you have a very good reason and have studied what it does.
#[[ $FHS_POLICY  ]] || FHS_POLICY=SLACK

# PKG_FORMAT
# src2pkg can create packages using bzip2 or lzma instead of gzip. These packages
# are not compatible with standard Slackware pkgtools, but can be installed using
# the tukaani pkgtools or other installers which support them. This defaults to
# the normal 'tgz' packages, or can be set to 'tbz' for bzip2 or 'tlz' for lzma
# [[ $PKG_FORMAT ]] || PKG_FORMAT="tgz"

# COMPRESS_BINS 
# src2pkg can automatically compress binaries  in the package, using upx, upx-ucl or exepak, if
# available on your system. This can save a lot of space in your packages and on your hard-drive.
#It may  occasionally cause problems, but most binary executables work fine compressed. You need 
# to have upx-ucl,upx or exepak  installed on your system for this to work -src2pkg does not supply them.
# BIN_COMPRESSOR
# You can choose which compressor to ues. The default is to use upx-ucl since it is open source.
# uncomment the following line to use upx (or edit to use some other program like exepak)
# [[ $BIN_COMPRESSOR ]] || BIN_COMPRESSOR=upx
# You can set the options to upx/upx-ucl here. Possible options include -1 to -9, --best, --brute, --ultra-brute
# The default is '--brute' which seems to be the fastest way to achieve the best compression
# [[ $BIN_COMPRESSOR_OPTIONS ]] || BIN_COMPRESSOR_OPTIONS="--brute"
# If you use 'exepak' as the BIN_COMPRESSOR, the only option is '-b#', where # is the block size.
# src2pkg will not attempt to compress files smaller than the COMPRESSION_SIZE_LIMIT
# the default size limit is 100K. Files smaller than ~50K may be *larger* after compression. exepak
# doesn't compress programs as well as either upx or upx-ucl, but works with files down to 5K.
[[ $COMPRESSION_SIZE_LIMIT ]] || COMPRESSION_SIZE_LIMIT=50
# Uncomment the following line to have binaries compressed
# [[ $COMPRESS_BINS ]] || COMPRESS_BINS=YES
# Be sure to test compressed programs to be sure they work!
 
# Preferred type of installation -this allows you to set the default method to use
# for creating package content. The JAIL installation method uses
# the libsentry libraries to install files directly into the PKG_DIR in much
# the same was as using the DESTDIR variable -except that this method can
# be used with Makefiles that don't support the DESTDIR variable. You can also
# set this to REAL to  use the method that used to be the src2pkg default.
# Using REAL lets the 'make install' command write files directly to your
# real root '/' directory. But files which are about to be overwritten are backed up
# first and then restored before package creation is finished.
# Using DESTDIR is familiar to and trusted by many people. If you choose this
# method and it is not supported by the Makefile(s) for a package you are building,
# src2pkg will revert to using the JAIL method.
# Using the DESTDIR or JAIL method and building packages while logged in
# a normal user is probably the safest way to make packages. 
# The REAL method can only be used while logged in as root, but it is the most 
# precise -that is it is the most likely to install all the files that are supposed to be
# installed and in the right place. Use it when you are having problems with the
# other two methods. Some packages can only be built correctly by using the -REAL
# option. When possible, avoid using this option to build packages of software which
# is already installed to you system. The backup feature works very well with real
# directories and files, but may not correctly backup some links.
#  [[ $INSTALL_TYPE ]] || INSTALL_TYPE=JAIL

## Options for interactivity
# QUERY_FOR_EXTRA_CONFIGS lets you configure sources interactively
# by first running './configure --help' to let you see available options and then
# waiting for input from the user which will be set in the EXTRA_CONFIGS variable
# uncomment the following line for interactive mode
# QUERY_FOR_EXTRA_CONFIGS=YES
# CONFIRM_BUILD lets you pause after configuring the sources to confirm whether
# you want to continue by compiling the sources and creating the package
# CONFIRM_BUILD=YES
# QUERY_FOR _PKG_DESC lets you pause to add a package description whenever
# a default slack-desc (PKG_DESC) is being created
# QUERY_FOR_PKG_DESC=YES
# You can set the above three options individually by uncommenting the line or lines you want
# or use all the interactive features together by uncommenting the line below:
# INTERACTIVE_MODE="ALL"

## Working Directories
# The default settings for these are like for Slackware SlackBuilds:
#
# The tarball, or link to it, is in the current directory 
# SOURCES_DIR="$CWD"
# Sources are unpacked and built in /tmp
# SRC_BUILDS_DIR="/tmp"
# The package build tree is also in /tmp
# PKG_BUILDS_DIR="/tmp"
# Finished packages are left in /tmp
# PKG_DEST_DIR="/tmp"
#
# libsentry needs a directory to backup overwritten files:
# BACKUP_DIR=/tmp
# If you keep backup archives they will saved to this directory:
# BACKUPS_SAVE_DIR=/tmp

# You can create a separate directory for each package
# and then do everything in the current directory:
# This is the way that I use src2pkg so that I can
# easily see both the compiled sources directory
# and the uncompressed package tree.
[[ $SOURCES_DIR ]] || SOURCES_DIR="$CWD"
[[ $SRC_BUILDS_DIR ]] || SRC_BUILDS_DIR="$CWD"
[[ $PKG_BUILDS_DIR ]] || PKG_BUILDS_DIR="$CWD"
[[ $PKG_DEST_DIR ]] || PKG_DEST_DIR="$CWD"
[[ $BACKUP_DIR ]] || BACKUP_DIR="$CWD"
#
# You can also set it up like rpm does and use the build area
# in /usr/src/src2pkg. There are subdirectories with the names
# 'packages', 'sources' and 'scripts'. You can place all source
# archives in the 'sources' directory. Then for each package
# you want to build, create a new directory under the 'scripts'
# directory. And you can have all the finished packages placed
# in the 'packages directory. If plan to build packages as a normal
# user you'll have to make sure that user has permission to
# read and write to all these directories. Then you can set up the
# directory variables like this:
# [[ $SOURCES_DIR ]] || SOURCES_DIR="/usr/src/src2pkg/sources"
# [[ $SRC_BUILDS_DIR ]] || SRC_BUILDS_DIR="/tmp"
# [[ $PKG_BUILDS_DIR ]] || PKG_BUILDS_DIR="/tmp"
# [[ $PKG_DEST_DIR ]] || PKG_DEST_DIR="/usr/src/scr2pkg/packages"
# [[ $BACKUP_DIR ]] || BACKUP_DIR="$CWD"
# PATCHES_DIR - You can put patches in a common dir
# [[ $PATCHES_DIR ]] || PATCHES_DIR="$CWD"

# If you are using some architecture besides ix86, you may want to
# change the defaults for these. See the DEFINES file for more
# info on how these are set by src2pkg
# [[ $STD_CONFIGS  ]]  ||  STD_CONFIGS=
# [[ $STD_FLAGS ]] || STD_FLAGS=""
# This is a better place to put extra compiler flags -for example '-pipe'
#[[ $EXTRA_FLAGS ]] || EXTRA_FLAGS="-pipe"
# This is a nice setting for producing smaller binaries on ix86
#[[ $EXTRA_FLAGS ]] || EXTRA_FLAGS="-pipe -combine -momit-leaf-frame-pointer -fomit-frame-pointer -fmerge-all-constants -mpreferred-stack-boundary=2"
# combine is not a valid option with gcc-3.4.6
# [[ $EXTRA_FLAGS ]] || EXTRA_FLAGS="-pipe -fomit-frame-pointer -fmerge-all-constants -fno-reorder-blocks -fno-reorder-functions"
[[ $EXTRA_FLAGS ]] || EXTRA_FLAGS="-pipe -fomit-frame-pointer"
[[ $EXTRA_LDFLAGS ]] || EXTRA_LDFLAGS="--relax,--sort-common,--no-keep-memory"


# DEFAULT_CONFIG_COMMAND
# you may wish to use something else like 'linux32 ./configure'
#[[ $DEFAULT_CONFIG_COMMAND ]] || DEFAULT_CONFIG_COMMAND='./configure'

# DEFAULT_ MAKE_COMMAND
# you may wish to use something else like 'remake', 'pmake'
# [[ $DEFAULT_MAKE_COMMAND ]] || DEFAULT_MAKE_COMMAND='make'
# JOBS  (MAKE_COMMAND)
# the default number of concurrent jobs to use with the make command
# This is blank by default. If you have a fast processor set it to '-j3' or more
#[[ $JOBS ]] || JOBS='-j3'

## User and user conf file authorizations
## To use the following authorization options, the system administrator must
# create a new group called 'src2pkg'. Adding a normal user to the group
# then allows them to use src2pkg and/or personal src2pkg.conf files in their HOME.
# AUTHORIZE_USERS="YES" only allows users in the src2pkg group to run src2pkg
# AUTHORIZE_USER_CONF="YES" only disallows the use of personal conf files
# for users who are not in the src2pkg group.
# uncomment the following line to enable authorization of users
# AUTHORIZE_USERS="YES"
# uncomment the following line to enable authorization of personal conf files
# AUTHORIZE_USER_CONF="YES"
## Both of the options are off (set to NO) by default.

## ALLOW_USER_EXTENSIONS
## this option allows users to extend the src2pkg functions by adding code to
# files in their $HOME/.src2pkg/extensions directory. The default setting  
# for this setting is NO. Uncomment the following line to allow extensions
# ALLOW_USER_EXTENSIONS="YES"

## AUTO_CONFIG
## src2pkg can search for options to the configure script and add them automatically
# The option AUTO_CONFIG can be set to either FOREIGN or NATIVE
# If set to FOREIGN, then src2pkg will try to retrieve options from any RPM *.spec file
# or debian/rules file which is found in the sources
# If AUTO_CONFIG is set to NATIVE, then src2pkg checks the configure script located
# in the sources and adds some valid options among those found there.
# Otherwise, src2pkg skips AUTO_CONFIG
#AUTO_CONFIG=FOREIGN
## AUTO_CONFIG_OPTIONS
## When using AUTO_CONFIG=NATIVE, src2pkg will search the configure script for
# a list of possible configure options. You can se the list of options that it should search for.
# The default list is very short: AUTO_CONFIG_OPTIONS="sysconfdir localstatedir"
# This is because many of these options will not always be the same from one package
# to the next. Also, setting these when not really needed can make your scripts less
# portable to other platforms or FHS policy standards. The two defaults listed above are
# the ones that most commonly cause problems if not set. Another pretty safe one is datadir
# You might also set: docdir, infodir and mandir, but this will make your scripts less portable
# by hard-coding these into the script, and these can all be handled automatically anway
# by setting FHS_POLICY. Here's a full list of the options which can be searched for:
# bindir, sbindir, libexecdir, sysconfdir. sharedstatedir, localstatedir, libdir,
# includedir,  oldincludedir, datarootdir, datadir, infodir, localedir, mandir,
# docdir, htmldir, dvidir. pdfdir, psidir, gamesbindir, gamesdatadir
# The default values for these are set in 01-pre_process according to your choice
# of FHS_POLICY. Though they can also be set manually inside your scripts
# you'll find it much easier to just set them using EXTRA_CONFIGS or the '-e=??' option
AUTO_CONFIG_OPTIONS="sysconfdir localstatedir"

## LINK_LICENSES
# Setting this to YES causes src2pkg to create a link to common licenses like GPL or LGPL
# src2pkg looks through the document directory to locate copies of the GPL, LGPL and Artistic license
# It then identifies the version of the license and moves it into a common-license directory and
# creates a link to it from the regular document directory. This doesn't make the package any
# smaller, but saves space on the disk being installed to. Saves a few MB on most systems.
# Uncomment and set to YES to have the licenses linked in your packages.
# LINK_LICENSES=YES

## COMPRESS_DOCS
# If you want to have the package documents compressed, uncomment this and set this to YES
# Note that if you used LINK_LICENSES above, the link will remain apart from the docs archive.
# COMPRESS_DOCS=YES
## DOC_COMPRESSOR
# Specify which compression method to use for compressing docs: gzip, bzip2 or lzma (default gzip)
# DOC_COMPRESSOR=gzip

# DESC_WRAP_LENGTH
# this variable tells text_wrapper how characters to use for each line
# in the PKG_DESC files created -normal range is 70-80
# [[ $DESC_WRAP_LENGTH ]] || DESC_WRAP_LENGTH=70
# [[ $HANDY_RULER_TEXT ]] || HANDY_RULER_TEXT="Use this guide to format your text with"
# this variable tells the text wrapper how many lines to pad the PKG_DESC file.

## DESC_MAX_LINES
# PKG_DESC files can have from 9 to 13 lines with the default being 11 lines
# You can set this to any value from 9-13
# [[ $DESC_MAX_LINES ]] || DESC_MAX_LINES=11

## EXIT_ON_PATCH_FAILURE
## By default, src2pkg only warns you when patching fails.
## If you want src2pkg to exit when patches fail, uncomment the following line
#  [[ $EXIT_ON_PATCH_FAILURE ]] || EXIT_ON_PATCH_FAILURE="YES"

## LOG_COMMANDS
## If you want src2pkg to keep logs of the output from the 'configure',
#  'make'  and 'make install' commands  uncomment the following line
# [[ $LOG_COMMANDS ]] || LOG_COMMANDS="YES"

# By default, logs are written to the $OBJ_DIR. You can change the default here, but you can only use
# $CWD or an absolute path
# [[ $LOG_DIR ]] || LOG_DIR="$CWD"

## AUTO_DESKTOP
## Setting this to YES makes src2pkg try to create a *.desktop menu file when applicable.
[[ $AUTO_DESKTOP ]] || AUTO_DESKTOP=YES

## AUDIO_NOTIFICATION
## Now a little fun -src2pkg can notify you when a build is succesful or has failed
## There are three modes: BEEP, PLAY and SAY. In 'beep' mode, src2pkg plays a beep sound
## on the PC speaker. In 'play' mode, a recorded sound is played. In 'say' mode, src2pkg
## uses flite or festival to speak a sentence. Notification takes place when a build has finished
## successfully, when the build has failed or when the build is cancelled.
## Various sounds are provided in /usr/share/src2pkg/sounds. See the README file there
## if you want to change which sound is played for each event.
## AUDIO_NOTIFICATION is off by default.
AUDIO_NOTIFICATION=SAY

## TTS_ENGINE
## If using AUDIO_NOTIFICATION=SAY,
## you can specify which Text-To-Speech engine to use. 
## 'flite' and 'festival' are supported. Defaults to 'flite'.
#TTS_ENGINE="flite"

######################################################################################
## HOST_OS,  BUILD_OS and TARGET_OS
## You can set these individually or all three will be set automatically set
## The default value is the same as the output from the command 'gcc -dumpmachine'
## That means they will match the native 'target' of the gcc compiler being used.
## If you are using src2pkg to cross-compile programs, you may need to set
## each of these variables to the appropriate values. These variables are not used
## unless you uncomment one of the options below: ADD_EXPLICIT_HOST or ADD_HOST

## ADD_EXPLICIT_HOST
## Set this to YES to have the explicit BUILD_OS HOST_OS and TARGET_OS 
## added to the configuration options where applicable. Using this option means that
## the options are passed to the configure script explicitly as seen below:
## CFLAGS=-O2 -march=i486 -mtune=i686 ./configure --prefix=/usr --build=i486-slackware-linux --host=i486-slackware-linux
## Normally the --target=?? option does not apply so don't expect to always see it.
#ADD_EXPLICIT_HOST=YES

## ADD_HOST
## Set this to YES to have the HOST_OS added to the configuration options
## This is the simple way to add the HOST to the configure options. Using this option
## adds the HOST_OS string at the end of the configure options. Here's an example
## of the optioons to configure that you'd see using this option:
## CFLAGS=-O2 -march=i486 -mtune=i686 ./configure --prefix=/usr i486-slackware-linux
## This is the syntax seen in most Slackbuild scripts, and unless you are cross-compiling
## you should never need to use any other settings beside setting this to YES:
#ADD_HOST=YES

## Adding the HOST string to the configure options is standard practice for most
## SlackBuild scripts, but is rarely needed and only in a few cases will it
## have any effect on the compiled program. Programs like 'bash', the Xorg server
## browser or email clients pick up the HOST information and include it in the
## text which is printed out when running the program with the --version option
## or may be displayed when the program is started.
## The inclusion of these variables is kept separate from the normal configuration
## options to make your src2pkg scripts are more portable. These variables and
## their values do not get written into any generated src2pkg scripts. Instead,
## these values are treated as 'transient' values which depend on which machine
## they are being run on. Including them in the src2pkg build scripts would
## mean that the script would have to be edited to use on another architecture.
## For that reason, I discourage you from manually adding these options
## to the EXTRA_CONFIGS variable.
######################################################################################

# UNIONFS_TYPE
# You only need to set this if you use the -UNION (INSTALL_TYPE=UNION)  option
# By default, src2pkg will use unionfs-fuse. If you'd rather use the unionfs kernel
# module, uncomment the following line
# [[ $UNIONFS_TYPE ]] || UNIONFS_TYPE=unionfs

## COMPAT_NAME_SUFFIX
# If building on a 64-bit multilib system, 32-bit compatibility packages should have
# a unique name to avoid name conflicts with the normal packages. On Slackware,
# the 32-bit compatibility packages add -compat32 to the name. On Slamd64, it's '32'
# Uncomment and edit the following line to use anything other than '-compat32'
# [[ $COMPAT_NAME_SUFFIX ]] || COMPAT_NAME_SUFFIX='-compat32'

## FAIL_ON_BAD_DIRS
# If a build installs 'incorrect' or potentially dangerous directories, src2pkg will, by default
# abort the package build. Uncomment the following line to allow builds to continue anyway.
# [[ $FAIL_ON_BAD_DIRS ]] || FAIL_ON_BAD_DIRS=NO

### Settings for creating debian *.deb packages
## DEB_COMPAT
# set the binary compat level for debian packages( defaults to 2.0)
# DEB_COMPAT=2.0

## PKG_COMPRESSOR
# Set the compressor to use for data.tar (defaults to gzip)
# Possible choices: gzip, bzip2, lzma, xz
# PKG_COMPRESSOR=gzip
Using this conf file will have everything done in the current directory which you'll probably find convenient.
Hmm, as I'm adding attachments I see you have responded again, so I'll go ahead and post this and then address other subjects.
Attachments
gpsd-patches.tar.bz2
(72.17 KiB) Downloaded 585 times

big_bass
Posts: 1740
Joined: Mon 13 Aug 2007, 12:21

#13 Post by big_bass »

Hey jemimah

A long time ago I assisted amigo with offering code and feedback to get src2pkg on puppy to build pets ( he is the developer-maintainer) at that time we had too many users and not enough package builders
so I used slackware formatted packages ever since

I wrote a Xdialog GUI fronted for the configuration files that will make the basic setup easy and you would be able to modify it quickly for your own personal needs (this is not an official src2pk GUI but it could be some day ... hint ,hint)


call this GUI_src2pkg_conf

it has a nice feature that you retain your anchored values that you personally set until you decide to change them again this means you (only run this script one setup time) and leave it alone

amigo suggested :
for specific builds package-specific tweaks/overrides should go in a NAME.src2pkg script for the build


I also would help even though I personally dont use pet packages now
I preset the GUI for "pets" and have worked around many of the gotchas

Joe






Code: Select all

#!/bin/sh

# a GUI for the configuration
# GUI_src2pkg_conf
# code for the "GUI's only" by Joe Arose   {big_bass} 
# for experts and new users 
# 2-3-2010 last updated 
# 1-22-2011 added for puppy non standard root packages  FHS_POLICY=NONE   
# and preset for puppy builds

# object to have a GUI tool to "aid" the configuration of the config file
# using just Xdialog to keep things lite
# establish some preset values to improve package compatability
# so that a uniform database/repo is easier to maintain
# depending on the distro/derivative that will be used   


# the preset values are already set for you

# the values starting with a "#"comment
# activates an inputbox if checked in the GUI
# since the file is the config file later being saved as ~/.src2pkg.conf
# the comments are overlooked  as commands  but..( read as a "flag bit" 
# at the same time using grep )  
# you are allowed to custom edit values with the inputbox
# for each package the string you type will be used and saved
# or you press ok to keep the default text in the inputbox 

# also all the values are saved so you only need to run the GUI
# "once" .The values are fixed until you check a new option in the GUI
# this is a nice feature when building many packages 
# to have an anchored but easily editable conf ---> fronted by a GUI


# Xdialog doesnt like $string values  so I'll cheat a bit 
# and pre set some values as text strings not the actual values that will be used

CWD='$CWD'

mkdir -p /root/GUI_SRC2PKG_CONF   #the folder contains "saved data" 

# if you want to see your anchored defaults they are saved as *.txt files  
# ***the final personal config file is saved in ~/.src2pkg.conf

cd /root/GUI_SRC2PKG_CONF



#-----------------------------------------------------------
#            GUI     
#-----------------------------------------------------------

DIALOG=Xdialog

$DIALOG --backtitle "Src2pkg advanced config options             "     \
	--title "SRC2PKG advanced config settings"             \
        --checklist "The default options are pre-selected 
         an inputbox or boxes may open after this GUI closes 
         scroll down to see all. Note that  #'s are inputs 
         select only one package format type    \n"  30 70 2  \
        "ADD_REQUIRED_FILE="YES""   "Add slack-requires                         " OFF \
        "ADD_PROVIDES_FILE="YES""   "Add slack-provides                         " OFF \
        "ADD_SRC2PKG_SCRIPT="YES""  "Add build scripts                          " ON \
        "FHS_POLICY="NONE""         "add files to root (puppy)                  " ON \
        "SOURCES_DIR="$CWD""        "same folder build                          " ON \
        "SRC_BUILDS_DIR="$CWD""     "same folder                                " ON \
        "PKG_BUILDS_DIR="$CWD""     "same folder                                " ON \
        "PKG_DEST_DIR="$CWD""       "same folder                                " ON \
        "BACKUP_DIR="$CWD""         "same folder                                " ON \
        "COMPRESSION_SIZE_LIMIT=50" "set smallest file compressed               " ON \
        "PKG_FORMAT="tgz""          "slackware package type                     " OFF \
        "PKG_FORMAT="pet""          "puppylinux package type                    " OFF \
        "PKG_FORMAT="pet";PET2=1"   "puppylinux woof type package               " ON \
        "PKG_FORMAT="tazpkg""       "slitaz package type                        " OFF \
        "AUTO_DESKTOP=YES"          "makes a .desktop file for you              " ON \
        "JOBS='-j3'"                "If you have a fast processor set this      " ON \
        "ALLOW_USER_EXTENSIONS="YES"" "allows customized builds                 " ON \
        "#EXTRA_FLAGS"              "special use an inputbox will open later    " OFF \
        "#EXTRA_LDFLAGS"            "special use inputbox                       " OFF \
        "#DEFAULT_CONFIG_COMMAND"   "special use inputbox                       " OFF \
        "#DEFAULT_MAKE_COMMAND"     "special use inputbox                       " OFF \
        "#AUTO_CONFIG_OPTIONS"      "special use inputbox                       " OFF \
        "#SIG"                      "inputbox personal signiture suffix         " OFF \
        "#PRE_FIX"                  "inputbox  if other than /usr               " OFF \
        "#SPLIT_PACKAGE"            "inputbox  divide packages                  " OFF \
        2> /root/GUI_SRC2PKG_CONF/checklist.tmp
             
        
       


retval=$?

choice=`cat /root/GUI_SRC2PKG_CONF/checklist.tmp`
#rm -f /root/GUI_SRC2PKG_CONF/checklist.tmp
case $retval in
  0)
    echo "'$choice' chosen.";;
  1)
    echo "Cancel pressed.";;
  255)
    echo "Box closed.";;
esac



#-----------------------------------------------------------
#            format file for input/output    
#-----------------------------------------------------------


# reformat the file for input of the URL downloader
# I did it this way to be clear and simple to read

# raw original convert slash to space
cat /root/GUI_SRC2PKG_CONF/checklist.tmp|sed 's/\// /g'>/root/GUI_SRC2PKG_CONF/checklist.tmp2

# convert space to new line 
cat /root/GUI_SRC2PKG_CONF/checklist.tmp2 |tr ' ' '\n' >/root/GUI_SRC2PKG_CONF/checklist.tmp3



#-----------------------------------------------------------
#            start input boxes
#-----------------------------------------------------------

filename='/root/GUI_SRC2PKG_CONF/checklist.tmp3'
# this is the list that gets read many times 


#-----------------------------------------------------------
#            EXTRA_FLAGS     
#-----------------------------------------------------------


if grep  '^#EXTRA_FLAGS' "$filename"  
then

# an inputbox opens here for EXTRA_FLAGS 
# this is the default value below
#[[ $EXTRA_FLAGS]] || EXTRA_FLAGS="-pipe -fomit-frame-pointer"

$DIALOG --title "EXTRA FLAGS INPUT BOX " \
        --inputbox "Type in a new value or use this default.\n
" 10 70 2>/root/GUI_SRC2PKG_CONF/extraflags.txt '[[ $EXTRA_FLAGS]] || EXTRA_FLAGS="-pipe -fomit-frame-pointer"'

retval=$?



case $retval in
  0)
    echo "Input string is '$input'";;
  1)
    echo "Cancel pressed.";;
  255)
    echo "Box closed.";;
esac

fi

#-----------------------------------------------------------
#               EXTRA_LDFLAGS
#-----------------------------------------------------------
 
   if  grep  '^#EXTRA_LDFLAGS' "$filename"  
   then
   
 
 
# an inputbox opens here for EXTRA_LDFLAGS 
# this is the default value below
#[[ $EXTRA_LDFLAGS]] || EXTRA_LDFLAGS="-pipe -fomit-frame-pointer"

$DIALOG --title "EXTRA LDFLAGS INPUT BOX" \
        --inputbox "Type in a new value or use this default." 10 80 2>/root/GUI_SRC2PKG_CONF/extraldflags.txt '[[ $EXTRA_LDFLAGS]] || EXTRA_LDFLAGS="--relax,--sort-common,--no-keep-memory"'

retval=$?



case $retval in
  0)
    echo "Input string is '$input'";;
  1)
    echo "Cancel pressed.";;
  255)
    echo "Box closed.";;
esac


  fi

#-----------------------------------------------------------
#           DEFAULT_CONFIG_COMMAND
#-----------------------------------------------------------

if grep  '^#DEFAULT_CONFIG_COMMAND' "$filename"  
then

# an inputbox opens here for DEFAULT_CONFIG_COMMAND
# you may wish to use something else like 'linux32 ./configure'
# this is the default value below
#[[ $DEFAULT_CONFIG_COMMAND ]] || DEFAULT_CONFIG_COMMAND='./configure'

$DIALOG --title "DEFAULT_CONFIG_COMMAND" \
        --inputbox "Type in a new value or use this default.\n
" 10 72 2>/root/GUI_SRC2PKG_CONF/defaultconfigcommand.txt '[[ $DEFAULT_CONFIG_COMMAND ]] || DEFAULT_CONFIG_COMMAND='./configure''

retval=$?



case $retval in
  0)
    echo "Input string is '$input'";;
  1)
    echo "Cancel pressed.";;
  255)
    echo "Box closed.";;
esac

fi

#-----------------------------------------------------------
#           DEFAULT_MAKE_COMMAND 
#-----------------------------------------------------------  
  
if grep  '^#DEFAULT_MAKE_COMMAND' "$filename"  
then

# an inputbox opens here for DEFAULT_ MAKE_COMMAND
# you may wish to use something else like 'remake', 'pmake'
# this is the default value below
# [[ $DEFAULT_MAKE_COMMAND ]] || DEFAULT_MAKE_COMMAND='make'

$DIALOG --title "DEFAULT_ MAKE_COMMAND" \
        --inputbox "Type in a new value or use this default.
        you may wish to use something else like remake, pmake\n
" 10 70 2>/root/GUI_SRC2PKG_CONF/defaultmakecommand.txt '[[ $DEFAULT_MAKE_COMMAND ]] || DEFAULT_MAKE_COMMAND='make''

retval=$?



case $retval in
  0)
    echo "Input string is '$input'";;
  1)
    echo "Cancel pressed.";;
  255)
    echo "Box closed.";;
esac

fi


#-----------------------------------------------------------
#           AUTO_CONFIG_OPTIONS 
#-----------------------------------------------------------  
 
  
  
if grep  '^#AUTO_CONFIG_OPTIONS' "$filename"  
then

# an inputbox opens here for AUTO_CONFIG_OPTIONS
# this is the default value below
#AUTO_CONFIG_OPTIONS="sysconfdir localstatedir" 

$DIALOG --title "AUTO_CONFIG_OPTIONS" \
        --inputbox "Type in a new value or use this default. \n
" 10 70 2>/root/GUI_SRC2PKG_CONF/autoconfigoptions.txt 'AUTO_CONFIG_OPTIONS="sysconfdir localstatedir"'

retval=$?



case $retval in
  0)
    echo "Input string is '$input'";;
  1)
    echo "Cancel pressed.";;
  255)
    echo "Box closed.";;
esac

fi


#-----------------------------------------------------------
#           SIG  a suffix added to the package name 
#-----------------------------------------------------------  
 
  
  
if grep  '^#SIG' "$filename"  
then

# an inputbox opens here for your SIG
# Enter a 3 to 4 letter signiture for your packages 
#SIG="" 

$DIALOG --title "SIG" \
        --inputbox "Type in a new value or use this default. 
        the SIG is a suffix added to the package name\n
" 10 70 2>/root/GUI_SRC2PKG_CONF/sig.txt 'SIG=""'

retval=$?



case $retval in
  0)
    echo "Input string is '$input'";;
  1)
    echo "Cancel pressed.";;
  255)
    echo "Box closed.";;
esac

fi


#-----------------------------------------------------------
#           PRE_FIX 
#-----------------------------------------------------------  
 
  
  
if grep  '^#PRE_FIX' "$filename"  
then

# an inputbox opens here for  PRE_FIX
#PRE_FIX="/usr" 

$DIALOG --title "PRE_FIX" \
        --inputbox "Type in a new value or use this default. \n
" 10 70 2>/root/GUI_SRC2PKG_CONF/prefix.txt 'PRE_FIX=/usr'

retval=$?



case $retval in
  0)
    echo "Input string is '$input'";;
  1)
    echo "Cancel pressed.";;
  255)
    echo "Box closed.";;
esac

fi

#-----------------------------------------------------------
#           SPLIT_PACKAGE 
#-----------------------------------------------------------  

# this is a special feature to divide
# the package in YET smaller packages 
  
  
if grep  '^#SPLIT_PACKAGE' "$filename"  
then

# an inputbox opens here for  SPLIT_PACKAGE
#SPLIT_PACKAGE= 

$DIALOG --title "SPLIT_PACKAGE" \
        --inputbox "Type in a new value or use this default. \n
" 10 70 2>/root/GUI_SRC2PKG_CONF/splitpackage.txt 'SPLIT_PACKAGE=devel,nls,i18n,docs'

retval=$?



case $retval in
  0)
    echo "Input string is '$input'";;
  1)
    echo "Cancel pressed.";;
  255)
    echo "Box closed.";;
esac

fi






# GOODBYE
Xdialog --title "Complete" \
        	--infobox "\n Your config was saved here /root/.src2pkg.conf/
        	and more info in /root/GUI_SRC2PKG_CONF\n" 0 0 4000
 
 
 
 
 
# defaults are saved and appened until you check the box and enter a new value
# filename was set on line number 124
# filename='/root/GUI_SRC2PKG_CONF/checklist.tmp3'


echo `cat /root/GUI_SRC2PKG_CONF/extraflags.txt`>>$filename
echo `cat /root/GUI_SRC2PKG_CONF/extraldflags.txt`>>$filename
echo `cat /root/GUI_SRC2PKG_CONF/defaultconfigcommand.txt`>>$filename
echo `cat /root/GUI_SRC2PKG_CONF/defaultmakecommand.txt`>>$filename
echo `cat /root/GUI_SRC2PKG_CONF/autoconfigoptions.txt`>>$filename
echo `cat /root/GUI_SRC2PKG_CONF/sig.txt`>>$filename
echo `cat /root/GUI_SRC2PKG_CONF/prefix.txt`>>$filename
echo `cat /root/GUI_SRC2PKG_CONF/splitpackage.txt`>>$filename
mv  $filename ~/.src2pkg.conf


# A note read more about this option 
## ALLOW_USER_EXTENSIONS
## this option allows users to extend the src2pkg functions by adding code to
# files in their $HOME/.src2pkg/extensions directory. The default setting  




#cleanup
rm -f /root/GUI_SRC2PKG_CONF/checklist.tmp
rm -f /root/GUI_SRC2PKG_CONF/checklist.tmp2
#rm -f /root/GUI_SRC2PKG_CONF/checklist.tmp3

#look at what was set
#a text editor could open this with less code
#but you take the risk of not saving the file correctly 
 
echo "`cat /root/.src2pkg.conf`" | Xdialog --title " /root/.src2pkg.conf" \--backtitle "Src2pkg advanced config options             "     \--textbox "-" 0 0








Attachments
src-gui.png
(162.09 KiB) Downloaded 1692 times
Last edited by big_bass on Sun 23 Jan 2011, 21:00, edited 1 time in total.

amigo
Posts: 2629
Joined: Mon 02 Apr 2007, 06:52

#14 Post by amigo »

I'll have a look at the 'waf' error in a little bit as it looks more serious. Thanks for the Xdialog code -it'll be easy to make that double for cdialog. There are people who use the CLI, so all this code has to work from there as well. But, speaking of Xdialog, big_bass wrote an Xdialog GUI for configuring the src2pkg.conf file some thime ago. I have a copy of it right ...around here somewhere. Maybe he'll chime in here and provide you a copy of it faster than I can find it. Maybe sometime I'll include it in the package -even though I find it may be a little too thorough, somehow. I mean too many options presented for the average user.

As for those average users and usability of src2pkg: It really could hardly be simpler, since about 80% of everything you ever try to package will build a perfect package with no extra options or any tweaking. It doesn't get much simpler than this:
src2pkg URL-of-source
Add '-I -W' to that and the thing will be installed and all temp files removed all in one fell swoop. For anything that doesn't build outta-the-box, there are so many possible causes that it can be initimidating for non-savvy types. I usually intervene for them -if src2pkg was more used by current Puppians there would always be someone around who could help with the smaller problems.

For advanced or difficult programs, you'll almost always want and need a script which can again be supllied by others. src2pkg takes all the drudgery out of building/rebuilding so that advanced users can concentrate on the 'fancy' stuff. Even when you have to 'intervene', you should be able to build 20-30 packages a day with all tweaks, corrections, patches and scripts. Makes it super easy to build for any other arch (the scripts are arch-agnostic), version or remix.

Sit_Heel_Speak also mentioned the 'steep learning curve', but I think it can get no simpler. And, as I said, there are ways to make src2pkg 'leverage' the human knowledge from others -using config options from spec or rules files, converting SlackBuild scripts into src2pkg scripts. (It wouldn't take much to make it understand crux/arch PKGBUILD files either -I had that working once just playing around.)

Anyway, if you are serious about maintaining a bunch of packages (or a distro full of them??), src2pkg will prove invaluable to you, and is the friendliest build-helper you could find for your users. I have a whole set of build scripts/patches/etc for all the basic progs and libs for a basic-with-X distro.

src2pkg does still need more testing under Puppy, though. It started out (7 years ago!)only to build slackware packages, so the other formats and fancy routines like splitpkg have been tested much less.

Uh, about the xterm problem, I was looking at how to solve this the other day as I was testing src2pkg on debian Lenny -debian uses x-terminal-emulator instead of xterm and some users may choose rxvt or whatever instead of xterm. Only xterm supports the '-hold' option which is used in several places in src2pkg. Perhaps you'd post the code of Barry's xterm wrapper -I was too lazy to fire up another box with a copy of puppy to get the code when I didn't find a copy of it my archives (I have 10's of thousands of sources around here...) That would be a big help, though your idea of using Xdialog/dialog may work fine for all the cases needed.

Lastly, here's a tip on the options which you'll find handy when building large sources: If a build fails or you halt it with CTRL+C, you can resume the build with this option: --resume=fake_install
You can also pause the build between each step of the build -but don't abuse this by making changes manually while paused :-(
You can quickly see the names of the build instruction steps with:
src2pkg --list

amigo
Posts: 2629
Joined: Mon 02 Apr 2007, 06:52

#15 Post by amigo »

Thanks Joe for posting that -now I'll have an extra copy of it around here ... somewhere.

Jemimah, I found the trouble with the waf code which is alos easy to fix. In 06-configure_source, go to line 601 and make601 and 602 look like this:

Code: Select all

		[[ -z $NUMJOBS ]] && NUMJOBS=0
		MAKE_COMMAND="./waf build -j $NUMJOBS"
I'm pretty sure this was working before without 'build' -maybe there has been an update to waf since then. The '-j' option is mostly for 'make' but no default value was being set for it anywhere.

I've placed the waf and splitpkg changes in the main src2pkg tree and you, of course, get the credit for finding and reporting them. Thanks again! (If you want your full name to appear in the ChangeLog, email me at: amigo AT ibibilo DOR org with the info.)
I remember now a bit of code that needs to be added for pets. If you use the '-E' to src2pkg it can produce 'postrm' scripts which can be renamed as puninstall.sh -the 15-make_package_pet needs to have a bit of code there for that. BTW, src2pkg is already producing postinst/doinst.sh/pinstall.sh scripts for you where needed unless you supply a pre-crafted one.

Let's see now, did I cover everything? Keep it coming -both of you!

amigo
Posts: 2629
Joined: Mon 02 Apr 2007, 06:52

#16 Post by amigo »

OOps, another glitch in waf option usage -I'm pretty sure there has been a version change in waf.
In 06-configure_source change line 597 :

Code: Select all

./waf configure prefix=/$PRE_FIX confdir=$sysconfdir/ 2> /dev/null 1> /dev/null
to this:

Code: Select all

./waf configure --prefix=/$PRE_FIX 2> /dev/null 1> /dev/null
and line 599:

Code: Select all

./waf configure prefix=/$PRE_FIX confdir=$sysconfdir/
to this:

Code: Select all

./waf configure --prefix=/$PRE_FIX
(You wont find these kinds of errors in code for autoconf, cmake, imake, etc. as they have gone through many thousands of tests)

User avatar
jemimah
Posts: 4307
Joined: Wed 26 Aug 2009, 19:56
Location: Tampa, FL
Contact:

#17 Post by jemimah »

Big_bass, pasting that script doesn't work. Can you attach it instead?

----

It would be easier if the src2pkg pet was preconfigured for puppy. You get slackware packages out by default. Xterm is just a symbolic link to rxvt - there's no wrapper - so that's a major obstacle in getting it to work. I'm not sure why it won't let me build packages in /root. I have to read the documentation for 15 minutes to figure out which options I need. Those are the only reasons the learning curve is steep.

I guess what I really think I want as a new user, is a package building wizard that holds my hand through the build process, and that doesn't make too many decisions without my input, but doesn't assume I know how to make a package either. Src2pkg is great once configured.


If I just get my sources from the developers website, I'd say maybe only 30% will compile without massaging either the configure script, the makefile, or the source. Is using slackware or debian sources better than that? My puplets are mostly built from vanilla source and I really prefer rolling updates rather than rebuilding the while system periodically.

Thanks for the updates. I'll test them shortly.

big_bass
Posts: 1740
Joined: Mon 13 Aug 2007, 12:21

#18 Post by big_bass »

Big_bass, pasting that script doesn't work. Can you attach it instead?

It would be easier if the src2pkg pet was pre-configured for puppy
Sure!
I preset "puppy *.pet" in this version of the GUI

*I installed the real xterm it is also required by many other scripts
from other distros


let me know how it goes

the root problem
just make a folder with the package name then build inside that folder

Joe
Attachments
GUI_src2pkg_conf.tar.gz
(3.19 KiB) Downloaded 467 times

User avatar
jemimah
Posts: 4307
Joined: Wed 26 Aug 2009, 19:56
Location: Tampa, FL
Contact:

#19 Post by jemimah »

That works now big_bass. Do I need these other files?

Code: Select all

cat: /root/GUI_SRC2PKG_CONF/extraflags.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/extraldflags.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/defaultconfigcommand.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/defaultmakecommand.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/autoconfigoptions.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/sig.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/prefix.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/splitpackage.txt: No such file or directory

big_bass
Posts: 1740
Joined: Mon 13 Aug 2007, 12:21

#20 Post by big_bass »

Hey jemimah
cat: /root/GUI_SRC2PKG_CONF/extraflags.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/extraldflags.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/defaultconfigcommand.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/defaultmakecommand.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/autoconfigoptions.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/sig.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/prefix.txt: No such file or directory
cat: /root/GUI_SRC2PKG_CONF/splitpackage.txt: No such file or directory
most all of those options are special "optional" that are not required
normally but if you want to sign your packages lets say "FLUP" or some other name to show what that package was made for
select #SIG from the menu then type FLUP when the input box pops up later on

maybe you will use split package then a default value of
SPLIT_PACKAGE=devel,nls,i18n,docs

will be auto preset for you if you want to edit that what you edit will be passed to the config file

so it already fills in the correct info but allows you to edit it if you want to
customize


*all of the options in the menu beginning with a #
allow you to change values but give you the logical answer already
preset




Joe

Post Reply