Opened 8 years ago

Closed 8 years ago

#29050 closed defect (fixed)

groff universal variant fails

Reported by: ryandesign (Ryan Schmidt) Owned by: macports-tickets@…
Priority: Normal Milestone:
Component: ports Version: 1.9.2
Keywords: universal Cc: drkp (Dan Ports), sobucni@…, daitakahashi, arnaud.antkowiak@…, bayonne, siavashsf@…, fracai, rmstonecipher@…, MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)
Port: groff

Description

groff 1.21's universal variant fails:

gcc-4.2: -E, -S, -save-temps and -M options are not allowed with multiple -arch flags

groff 1.20.1's universal variant did not have this problem.

Attachments (3)

main.log (31.0 KB) - added by ryandesign (Ryan Schmidt) 8 years ago.
Portfile.diff (461 bytes) - added by daitakahashi 8 years ago.
This is quick hack, but it seems to work.
Portfile.2.diff (1.2 KB) - added by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez) 8 years ago.

Download all attachments as: .zip

Change History (23)

Changed 8 years ago by ryandesign (Ryan Schmidt)

Attachment: main.log added

comment:1 Changed 8 years ago by drkp (Dan Ports)

Cc: dports@… added

Cc Me!

comment:2 Changed 8 years ago by sobucni@…

Cc: sobucni@… added

Cc Me!

comment:3 Changed 8 years ago by daitakahashi

Cc: dtakahashi42@… added

Cc Me!

comment:4 Changed 8 years ago by arnaud.antkowiak@…

Cc: arnaud.antkowiak@… added

Cc Me!

comment:5 Changed 8 years ago by drkp (Dan Ports)

Looks like it's trying to do dependency tracking (gcc -M) and can't with multiple arch flags. I feel like we must have dealt with this before, but the only references I can find are to automake programs that support --disable-dependency-tracking, which this does not.

comment:6 Changed 8 years ago by ryandesign (Ryan Schmidt)

I'm not familiar enough with gcc to know what "gcc -M" is about and whether there is an alternative we could use. One could compare the 0.20.1 source with the 0.21 source to see what changes were made that caused this, and if they can be reversed. Or we could see if using the muniversal portgroup is a viable option for groff.

comment:7 Changed 8 years ago by drkp (Dan Ports)

I just tried muniversal, actually. It failed with:

Error: Target org.macports.destroot returned: /opt/local/share/doc/groff-1.21/pdf/pdfmark.pdf differs in /opt/local/var/macports/build/_opt_local_var_macports_sources_svn.macports.org_trunk_dports_sysutils_groff/work/destroot-i386 and /opt/local/var/macports/build/_opt_local_var_macports_sources_svn.macports.org_trunk_dports_sysutils_groff/work/destroot-x86_64 and cannot be merged

I wonder if the pdf files differ only because they are compressed, in which case we should decompress them and rerun the comparison, as we do for .gz files (although I don't know if there's a way to easily decompress a pdf without pulling in esoteric dependencies). Or it's possible they just legitimately differ.

(Of course, if there were a solution that didn't require muniversal that would obviously be preferable.)

comment:8 Changed 8 years ago by bayonne

Cc: porter@… added

Cc Me!

comment:9 Changed 8 years ago by daitakahashi

The origin of this problem seems to be a supplemental call of configure at src/libs/gnulib, which was introduced at 1.21.

See Makefile.in:770,

$(GNULIBDIRS): FORCE
 ...
	test -f Makefile || $(SHELL) $$srcdir/configure ; \               <-- here
	$(MAKE) ACLOCAL=: AUTOCONF=: AUTOHEADER=: AUTOMAKE=: $(do) ;; \
	esac

a supplemental configure script is called without any options, therefore, it ignores --disable-dependency-tracking, --prefix and so on.

I think the evaluation of this configure script (with appropriate options) at post-configure phase will solve the problem.

comment:10 Changed 8 years ago by ryandesign (Ryan Schmidt)

Cc: siavashsf@… added

Has duplicate #29066.

comment:11 Changed 8 years ago by fracai

Cc: arno+macports@… added

Cc Me!

Changed 8 years ago by daitakahashi

Attachment: Portfile.diff added

This is quick hack, but it seems to work.

comment:12 Changed 8 years ago by rmstonecipher@…

dtakahashi,
Some of the commands in your patch are not yet documented in the MacPorts Guide.
Could you explain what your patch does?

This could also be resolved by adding configure.cflags or configure.universal_cflags to Makefile.in using a patchfile and a post-patch reinplace.

Index: files/patch-Makefile.in.diff
===================================================================
--- files/patch-Makefile.in.diff        (revision 0)
+++ files/patch-Makefile.in.diff        (revision 0)
@@ -0,0 +1,11 @@
+--- Makefile.in.orig   2011-04-09 23:21:32.000000000 -0500
++++ Makefile.in        2011-04-09 23:22:27.000000000 -0500
+@@ -767,7 +767,7 @@
+       case $(do) in \
+       all) \
+       cd $@; \
+-      test -f Makefile || $(SHELL) $$srcdir/configure ; \
++      test -f Makefile || $(SHELL) $$srcdir/configure %%CONFIGURE_ARGS%%; \
+       $(MAKE) ACLOCAL=: AUTOCONF=: AUTOHEADER=: AUTOMAKE=: $(do) ;; \
+       esac
+ 
Index: Portfile
===================================================================
--- Portfile    (revision 77708)
+++ Portfile    (working copy)
@@ -15,10 +15,20 @@
 master_sites     gnu
 checksums        sha1    a513aca4a7530a6e63325addd6ba2d282c8f1608 \
                  rmd160  d050f886291a53ea46875887e5641e510e1aecf6
+depends_build    port:psutils
 configure.args   --infodir=${prefix}/share/info \
                  --mandir=${prefix}/share/man \
                  --without-x
+patchfiles      patch-Makefile.in.diff
 
+post-patch {
+    if {[variant_isset universal]} {
+        reinplace "s|%%CONFIGURE_ARGS%%|${configure.universal_args}|g" ${worksrcpath}/Makefile.in
+    } else {
+        reinplace "s|%%CONFIGURE_ARGS%%|${configure.args}|g" ${worksrcpath}/Makefile.in
+    }
+}
+
 post-destroot {
     delete ${destroot}${prefix}/lib/charset.alias
 }

dtakahashi's way is more terse.
Does it matter which solution is used?

Ryan Stonecipher
P.S. The other change in my Portfile diff, adding 'depends_build port:psutils', allows the documentation to build html per a configure-time warning.

comment:13 Changed 8 years ago by ryandesign (Ryan Schmidt)

His patch says: run the configure phase with the settings set in the portfile, then run the configure phase again in a different directory. Ryan, you're right this is not a command listed in the guide or approved for use in portfiles. I am of course also guilty of using this in the php5extension portgroup, and a similar method in the php5 portfile, but I'd rather not proliferate its use if at all possible.

Does this second configure script really need all the arguments passed to the main one? Does it for example matter whether --prefix is passed to it? If not, and if the only thing we're concerned with is disabling dependency tracking, then just write a simple one-line patch that unconditionally adds that flag to that configure script invocation; there's no harm in disabling dependency tracking even when not building universal. Dependency tracking is only relevant when a build directory is reused, which in MacPorts it never is; it's cleaned after every successful build.

comment:14 Changed 8 years ago by ryandesign (Ryan Schmidt)

In fact, Ryan, if your intention with your patch was to pass all the usual args to that second configure script, you haven't succeeded. In the universal case, you're not passing configure.args, and in neither case are you passing configure.pre_args.

comment:15 Changed 8 years ago by rmstonecipher@…

Cc: rmstonecipher@… added

Cc Me!

comment:16 Changed 8 years ago by daitakahashi

Thank you for the better fix. As you pointed, portconfigure::configure_main is not documented (but it is exported to global namespace from ${prefix}/share/macports/Tcl/port1.0/portconfigure.tcl), so I should not have used it...

In my observation, Makefile at src/libs/gnulib does not install anything, but just build libgnu.a that is statically linked to main binaries. So passing all the configure options is not needed, and I agree to add a small patch that unconditionally disables dependency tracking.

comment:17 Changed 8 years ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)

Cc: mcalhoun@… added

Cc Me!

Changed 8 years ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)

Attachment: Portfile.2.diff added

comment:18 Changed 8 years ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)

Attached is another possible solution.

comment:19 Changed 8 years ago by ryandesign (Ryan Schmidt)

Yes, but we were trying to avoid the muniversal variant if possible.

comment:20 in reply to:  16 Changed 8 years ago by ryandesign (Ryan Schmidt)

Resolution: fixed
Status: newclosed

Replying to dtakahashi42@…:

So passing all the configure options is not needed, and I agree to add a small patch that unconditionally disables dependency tracking.

Seems to work. r77723

Note: See TracTickets for help on using tickets.