LM BLD

The LM BLD system is a template based tool system to facilitate building and sharing of programs.

There are several build tools, package management systems, archive tools already out there. So why reinvent the wheel? None of these fit well with the design priorities I wanted in a system. So as the song says, I did it my way. I've been working on this on and off in my free time for several few years now. I intend to keep at it until I have something well documented, tested on several platforms and ready to share.

My Design Priorities

LM BLD System Status

I currently have templated build scripts and install/uninstall/update scripts working. I also have scripts that can go through a list of package names and perform a particular function such as build and install or check if a later version of a program is available. The system is currently being used by me to automate building several Open Source applications. It also helps keep track of all the patches I've been collecting. I still have many features I want to add including more dependency handling and archive additions. I'm also currently working on including some type of documentation feature so that users can easily put together a document of applications installed on their system that can be shared with anyone interested in FLOSS programs. At some point, I intend to make it available under a BSD 2 clause style license. If you're interested in the project, you can contact me through the CPPDesign mailing list.

LM BLD System Scripts

I'm starting to upload generated build scripts to an online archive. The archive includes the original source files for packages. It also includes the input files for the LM BLD system. Some examples of output files generated by the LM BLD system for a particular platform have also been uploaded. With the generated build files, one should have a script with all the commands (and patches) needed to build a particular package. The system assumes you build things in the proper order as far as dependencies are concerned. Build dependencies for a project are listed in bldepend.txt if needed. One would need the same file structure and tools in order to be able to use the generated build scripts on a system. Since these can vary from machine to machine, the LM BLD system can be set up for different options and generate different outputs based on how a particular machine is set up and the tools available. The mingw and linux versions of the bld files show some of the variations that can be created when using the same inputs to the LM BLD system. If there's interest, at some point, I can attempt to add more binaries to the archive. One needs to download all related dependencies separately at this point. There are plans to add the ability to download build scripts and binary packages plus their dependencies via a GUI at some point in the future.

The build scripts generated by the LM BLD system have similarities to a Slackware Slackbuild script format. When building a package using a build script and related files generated by the LM BLD system, a very specific directory structure is assumed. For the examples in the archive, I've placed my Windows files in the \mingw\msys\opt\src directory. The Linux files are currently assumed to be in the /home/lm/opt/src directory. Each package should have its own subdirectory underneath. The package directory should appear as follows:

       package_name 
                   ---> bld
                   ---> mingw
                             ---> bld
                             ---> tmp
                             ---> src                                
                   ---> linuxgcc
                             ---> bld

So, for Windows, the source files for cdetect go in \mingw\msys\opt\src\cdetect. The files used as input for the LM BLD system are stored in \mingw\msys\opt\src\cdetect\bld. The build files generated by the LM BLD system are stored in \mingw\msys\opt\src\cdetect\mingw\bld. When I run the build script (bld.sh), it temporarily creates a tmp directory at \mingw\msys\opt\src\cdetect\mingw\tmp where the package is built. The final package is archived and compressed and stored in the \mingw\msys\opt\src\cdetect\mingw directory. When I create my patch files, I do a diff between the original source in \mingw\msys\opt\src\cdetect\mingw\src and my modified source in \mingw\msys\opt\src\cdetect\mingw\tmp.

I've put together a summary of some of the libraries and programs I've been working on. It lists details of some of the projects that have been uploaded to the archive.

LM BLD System User Interface

I wanted a portable, uniform user interface to tie applications and documentation together for end users that prefer a GUI to command lines. I looked for a lightweight, cross-platform Open Source browser as a starting point and modified the code. It can now be used as a replacement for programs like dialog, xdialog, gtkdialog, etc. You can use standard HTML and CSS to create a GUI interface for scripts and lightweight or command line applications. It can provide a graphical front end for the system and should handle issues such as internationalization. It will also work in console mode if you prefer that to X Windows or the native Windows look. I currently have my user interface modifications made to two cross-platform browsers: lynx and dplus. I also have a sample configuration tool to demonstrate the technique. The configuration tool provides menus to set basic environment variables, edit configuration files and run applications that give information about a system (simple control panel). The technique can be modified or expanded to display other options. It uses either modified browser, bash scripts, html and css. I'm using bash because it is available on all the platforms I'm working with, but other scripting languages would work as well.

I'm making available a copy of the patches I created to turn the lynx and dplus browsers into user interfaces. I have patches and build scripts to create:

I created a tool to simplify parsing of URLs output by these user interfaces. I have C++ code for uiresult and a Windows executable. The program is cross-platform and should build on a variety of systems.

I'm also making my bash configuration tool scripts available to demonstrate using HTML and CSS as a user interface.

If you have any problems with the build scripts retrieving the original source code, I have backup copies available for:

I'll probably replace this idea with my GIST program (Generic Interactive Story Teller). I'm currently working on a cross-platform GUI written in C and converting GIST to work using it. The concept is similar to using HTML and displaying it with a web browser to create an interface, but the GIST program was originally created (before HTML) in order to launch other applications. Syntax is different from HTML, but it includes commands specifically for launching and running programs. With all the additions to the HTML standard, it's probably much easier to learn the GIST syntax at this point.

LM BLD UI sample Theme Changer

I'm hoping to use these tools to create another example application, a jwm theme changer utility to change some of the options for this window manager including switching looks/themes. If you have a theme you've created for jwm that you'd like to be a part of the theme collection for this utility, please let me know. I'd like to collect some additional themes besides just my own and would be happy to list your name as the author of the theme. The settings/theme must be licensed under some sort of Open Source license for distribution with the utility program.

LM BLD Sysbase Alpha

While I want to adapt to the tools available on a system, I still want to make sure there are a minimal set of tools to build with under any circumstances. Typically Open Source operating systems use gnu tools like core utilities. More lightweight or embedded systems may use tools like busybox or toybox. sbase also looks like a great alternative. After looking at the specifications on some of the system tools available, I've decided to put together my own mainly BSD and MIT style licensed collection. Currently, I'm investigating what's available for systems like PicoBSD, FreeBSD and Minix to see what might be adapted. I'll be adding utf8 support in certain areas using my own lmutf8 library. The goal is a minimal set of tools for command line use and building applications that is lightweight, cross-platform and coded in a readable and understandable manner.

How to Help

I still have a lot of design decisions I have to work out. Some of them are detailed on My Ideal Open Source Distribution page. Am hoping to make the programs as portable as possible, so they're not stuck with looking for resources only at hard-coded locations. I'm researching various ways to create cross-platform applications on Linux systems. I considered LSB, but found it unsuitable for several reasons. I may look into using a custom-built GNU compiler with musl or another standard C library alternative. llvm could be another option, but so far, it's been harder to build from source than the GNU compiler toolchain. Many people are using Docker on Linux to create portable apps, but I want a much more lightweight solution for this project. Am also researching distribution issues and want to make sure sneaker net and creating CDs or flash drives with the applications are viable options along with Internet access for downloads. I'm still defining how close to adhere to some of the freedesktop standards and how much to diverge since this system is designed to work on multiple platforms including some where those standards aren't used. I'm always looking for other lightweight programs to add to the list of applications I'll be building. I'm also looking for lightweight or more efficient versions of common utilities and build tools. My preferences at this point are command line, console based (pdcurses/ncurses/bsd-curses), SDL (1.2.15 or 2.x) applications written in C. I'm also using some FLTK applications written in C++. I'm looking for BSD, MIT or similarly licensed utilities when there are lighter alternatives to GNU licensed ones. I'm also looking at public domain, unlicense and CC0 applications. I'd greatly appreciate light-weight software recommendations. If you'd like to help, I'd be interested in hearing other opinions and pros and cons on some of these design issues or other suggestions.

 

To the main page.

 

Validate XHTML



The information on these pages is copyrighted by the author with all rights reserved. Reproduction of anything without the author's permission is in violation of copyright laws.
All original material is copyrighted:
(c) Copyright 2012, 2022 by Laura Michaels
All Rights Reserved
Last Update: 20220109