Hi Ken-

Apologies for the long post.

I'm primarily a MacOS user here, and I've had nothing but frustration with MacPorts. In fact, I tried to submit fixes for the problem you're referring to all those years ago and was met with silence. I eventually gave up trying. I can provide assistance if you'd like to try your hand at getting the problem resolved.

The home-brew port of pike was my handy-work and it's completely up-to-date. There are a lot of things about home-brew that I don't like, but it seems to have the lion's share of the market. The version of autotools works for building pike (I use an isolated brew install for the ancillary build tools when I'm preparing the "official" binary that you describe using below).

Details of how I prepare those builds is described in this document:

http://wiki.gotpike.org/PikeDevel/Pike+Distribution+on+OSX

Most of the effort surrounds getting a known set of static libraries to build against and avoiding picking up dynamic library references from things that won't be present on a stock system (like macports or home-brew installed libraries).

I also have a port of pike for pkgsrc, which is installable on MacOS, and it's pretty well tested. I've been meaning to have it included in the official repository, but haven't found the time to send an email about it (a poor excuse, I realize).

Now, to your specific problem:

If you've installed the binary distribution from the pike website and want to build and install a module that wasn't included in the binary dist, it's actually fairly straightforward to do:

1. Install any prerequisites you might need
2. Download and pack the /source/ distribution for the version of pike you've got. 3. Go into the directory of the module you want to build (Pike-v8.0.1738/src/post_modules/GTK2) 4. Run pike -x module and watch the configuration process to make sure it's found your dependencies. 5. If it's not finding your dependencies, you'll probably need to add those directories to the appropriate places in the specs file, which is located in the /path/to/pike/include/pike/specs 5a. Run pike -x module spotless to remove all build products before rebuilding. 6. Repeat 4 through 5 until it's finding things and building a module with the support you want.
7. sudo pike -x module install

As an example, I did this with home-brew, and the path of least resistance for me was to install autoconf, pkg-config and gtk+. I added -I/opt/homebrew/include to the Makefile wherever -I were also found, and also changed the include of image.h in pgtk.h to point to the absolute path to that file, which is is in src/modules/Image. I was then able to build and install GTK2 and test it out using the following code:

Alert.pike:

#pike __REAL_VERSION__

// Create a simple alert window. The default title is @expr{Alert@}. A
// single button @expr{Ok@} will be created. Pressing it removes the
// dialog.

inherit GTK2.Dialog;

void begone(object w2)
{
  this->hide();
  destruct( this );
}

object ok_button;

//! Returns the ok @[Button] object.
GTK2.Button ok()
{
  return ok_button;
}

//!
void create(string text, string|void title)
{
  ::create();
  object l = GTK2.Label( text );
  set_title( title||"Alert" );
  l->set_justify( GTK2.JUSTIFY_LEFT );
  l->set_alignment(0.0, 0.5);
  l->set_padding( 20, 20 );
  vbox()->add( l->show() );
  ok_button = GTK2.Button("OK");
  ok_button->signal_connect( "clicked", begone );
  action_area()->add( ok_button->show() );
  show();
}

test.pike:

object alert;

int main()
{
  GTK2.gtk_init();
  alert = .Alert("Hello world!\n");
alert -> signal_connect("hide", lambda(){ werror("whee!\n"); exit(0); });
  return -1;
}

I adapted the GTKSupport.pmod/Alert.pike from GTK1 to GTK2. For some reason, the destroy signal isn't being triggered when the Alert object is destroyed in begone(). Perhaps some GTK2 wizard will have more details about that. I worked around it by triggering exit() when the alert is hidden.

Hope this helps... don't hesitate to get in touch with any questions or comments.

Bill

On 2023-08-24 00:34, Kenneth Wolcott wrote:
Hi Bill;

  Thanks for your response.

  It looks like I'm in a crippled state :-(

  I am unable to build from source because I can't seem to get the
correct and functional version of the autoconf family installed (I'm
on a Mac, M1 chip and using MacPorts).

  The version of pike on MacPorts fails to build (supposedly
unofficially unsupported on MacPorts for 15 years??!!)

  I was able to download and install the Pike binary
(Pike-v8.0.1738-MacOSX-12.0-arm64 from
https://pike.lysator.liu.se/download/pub/pike/latest-stable/), install
it and use it, but it looks like all I have is a binary.

  So it looks like all I can have is a Pike binary with the modules
that come with the binary, no ability to build or import additional
packages (as far as I can tell).

  I have lots of pertinent MacPorts ports (packages) installed, such
as gtk2 and gtk3...

  Anyway, the most important thing for me right now is to enjoy the
builtin big integer support and the fact that Pike is interpreted (no
edit/build/run cycle) and test out some things that is harder to do in
C.  I'm coming from a Perl background (retired software build
engineer) and am exploring things now that I never had time to do
before.  I really liked Ada when I was in college, so I'm re-learning
it and intending to master it,  I'm learning a lot from the Rosetta
Code web site.  I'm also fiddling around with Pike, Wren, Lua, Go, D,
Ruby and Rust.

Thanks,
Ken

Reply via email to