text:
Blogposts News & Features Featured WWE Wrestling NJPW AJPW NOAH
Slammer Jabber June 6
Welcome to Slammer Jabber, your weekly look at all things professional wrestling from the past seven days. This week we have a ridiculous amount to cover with the usual weekly TV, a major NXT Takeover show, huge developments in New Japan Pro Wrestling, the sad passing of an AJPW star. Plus we have the much-maligned WWE Super Showdown event in Saudi Arabia on Friday. It is jam packed this week, so we'll crack on by looking back at NXT Takeover XXV.
NXT Takeover XXV
This past Saturday NXT celebrated its 25th Takeover event from the glamorous, historic surroundings of...Bridgeport, Connecticut. Ok, so it's not Brooklyn or Dallas or Toronto, but it certainly was a historic event. If anything, it felt a bit like the early Takeover shows where it was a bit less flashy than the brand has become. The build for the show was admittedly lacklustre and I know many weren't mega excited for the show, but as NXT tends to do, it delivered.
Takeover XXV opened with Matt Riddle and Roderick Strong arguably stealing the show with a hard hitting, back-and-forth battle that looked snug and stiff. Riddle is beginning to look like the real deal, but Strong had a really good showing here and hopefully that opens a few more eyes to how good he really can be. Velveteen Dream is a joy to watch, and his match against Tyler Breeze was really quite good. I can see why they've been put together and Breeze looked better here than he has since going up to the main roster. Io Shirai had her best WWE outing to date against Shayna Baszler, who really needs to go up to the main roster soon. Not sure how I feel about the post-match given Baszler won the match cleanly, but I also appreciate they need to build to a return bout. The tag team ladder match was better than the average match of that type with some huge spots, but not so many contrived ones. It was well structured and had plenty of big moments for everyone. The Street Profits are a good choice for champions and they are massively over with the NXT crowd. For now it's a great fit for Montez Ford who is still pretty green but could be a major player in the future, and it hides how average Angelo Dawkins is even after years at the PC.
Finally, we had the main event pitting Johnny Gargano against Adam Cole. This match was either brilliant, or unwatchable for many. It really depends how you feel about the overuse of false finishes and an alleged lack of psychology. It was the epitome of the modern indie style, with lots of no-selling big moves. However, although I absolutely appreciate the criticisms I genuinely enjoyed this match. Cole and Gargano have excellent chemistry and this was a worthy main event for such a major show. Plus this only leaves the North American Championship out of the grips of Undisputed Era.
NXT XXV was a fine show, and while it probably won't be the most well-remembered Takeover event ever it certainly had some excellent matches and sets up the major programmes for NXT over the summer.
August 31st log jam
August 31st looks like it may well be a rather busy day in the calendar now for UK wrestling fans. At NXT Takeover XXV it was announced that NXT UK will be hosting its second Takeover event, which is great news for the brand and UK fans. The catch? It's on August 31st in Cardiff. Now if that date rings a bell it's because that is the same day as NJPW run their Royal Quest show at the Copper Box in London. Of course, much later in the day AEW will be running their All Out show in Chicago. So you potentially have fans who have already bought tickets to NJPW who likely would have gone to Takeover, as well as those who might decide to fly out to the states for All Out/Starrcast. In addition there are various indie shows taking place including Rev Pro in London on the Friday night.
It seems like poor planning from WWE, even if they booked the venue months ago it is still in Cardiff the same weekend as the Wales rugby team will be playing Ireland making hotel availability scarce. The whole thing is either very short-sighted, or shows how well WWE regard the NXT UK brand. Regardless, this will force many fans to choose between shows when arguably they would likely have gone to both. It's an unnecessary log jam which as a UK-based wrestling fan is very disappointing in terms of fan service. It's not like WWE don't have a history of moving events to avoid clashes, just see the most recent NXT Takeover which was left as an isolated event because WWE moved (and the scrapped) Backlash to avoid clashing with the Saudi Arabia show on Friday. They also moved the NXT show on Wrestlemania weekend to avoid clashing with NJPW/ROH at Madison Square Garden, so there is precedent, but with the venue announced and tickets on sale it looks to be full steam ahead, and possibly a lower turnout, which is a shame for the talent involved.
Raw and Smackdown
For the sake of brevity I'll keep it short this week when it comes to Raw and Smackdown. On Monday WWE presented a mostly very enjoyable episode of Raw. The threat of cash-in and the fake out from Brock Lesnar was well done, although no-one bought it as being an actual cash-in. I like Lesnar as the shadow to Rollins, psychologically torturing him with the constant threat of taking the title, but on his terms. The Undertaker cut his usual spooky promo (more on him in a minute). Ricochet vs Cesaro, Charlotte vs Lacey Evans (including the stuff with Becky Lynch), and Drew McIntyre and The Revival vs Roman Reigns and The Usos were all entertaining in-ring matches that forwarded programmes for either Super Showdown or Stomping Grounds. The arm wrestling match between Braun Strowman and Bobby Lashley was a nice throwback to the sort of angle you'd expect in the 80s. Lars Sullivan brawling with The Lucha House Party was what it was, while Randy Orton and Triple H did a fine job of reminding everyone of their storied past ahead of Friday. Rey Mysterio relinquishing his title to Samoa Joe was making the best of a bad situation. Finally, Bray Wyatt put on possibly the most creative Firefly Funhouse yet. Wyatt is brilliant in these and while I had previously hoped they would pay this off soon, at this point I almost hope they hold off till Summerslam.
Smackdown also presented a very strong show this week. Bill Goldberg's return was absolutely electric and he came across as an proper mega-star. While The Undertaker appeared only briefly, the showdown between the two was some of the best TV that WWE have produced all year. Absolute home run there. The opening with Kofi Kingston and Xavier Woods vs Sami Zayn and Kevin Owens was very good, although Owens and Zayn were more background players to the verbal sparring between Kingston and Dolph Ziggler. The chaotic "Moment of Bliss" segment was effective in setting up the triple threat match for later on, and Alexa Bliss getting the win makes sense. I also enjoyed the more aggressive side to Bayley's character in all this. Andrade vs Apollo never really got started and was again more of backdrop for the go-home angle for Andrade vs Finn Balor. The segment with Shane, The Revival and Drew McIntyre beating down Roman Reigns was an interesting hook for Friday. I very much enjoyed the 24/7 shenanigans, which after a rocky start have really become fun parts of WWE television and social media. Finally, both Lars Sullivan and Aleister Black cut very different, but both quite eerie promos. I preferred Black's, but Sullivan's felt less cryptic and more designed for the immediate future.
Overall, WWE put together some pretty good TV this week, and although Super Showdown is at the forefront, they set up plenty of Stomping Grounds in two weeks time.
NJPW Best of the Super Junior finals + Dominion preview
While many eyes are on WWE's jaunt to Saudi Arabia, New Japan Pro Wrestling are also having a pretty busy week, with the finals of the Best of the Super Juniors tournament, which in effect has operated as a go-home show for Sunday's Dominion event. The tournament itself has been incredible, with a freshly stacked junior division providing multiple stellar matches. I would recommend some, but frankly I would urge you to go back and watch as much as you can to avoid missing out. The finalists Will Ospreay, who previously won the tournament in 2016 and Shingo Takagi, who went undefeated until the final were both stand outs from the grueling series of shows, but put on a classic in the final. I genuinely believed Shingo would get the win, but having run roughshod over the division the loss here does him no harm, while also not sticking him with the albatross of an undefeated streak. Ospreay will go on to challenge Dragon Lee for the IWGP Junior Heavyweight Championship at Dominion in what should be another cracking encounter, although I expect Lee to get the win. Ospreay looks set to take part in the G1 this year as he moves back up to heavyweight and I wouldn't even be shocked to see him win it. As for Lee, with the soon-to-return Hiromu Takahashi waiting in the wings I would imagine he will be kept strong to face his nemesis, and presumably drop the title. As for Shingo, there's plenty of time to rebuild him for a title match at the Tokyo Dome in January, or as one of the larger juniors a move up to the heavyweight division. Lots of possibilities, and a fantastic cap on a brilliant tournament.
The other big news coming out of this show was the debut and IWGP US Title win for one Jon Moxley. The former Dean Ambrose came out in trunks, surprisingly, and beat the now-dreadlock-free Juice Robinson in a surprisingly even battle. Moxley is employing a new, more chaotic style and an adapted version of the dirty deeds (now the "death rider"). It is certainly a memorable way to debut in NJPW for arguably the biggest name outside of WWE at the moment, and certainly the man whose name is one everyone's lips. A great start for Moxley.
Sunday's Dominion card is on paper a very exciting show, even if it doesn't quite feel like it has been built as well as previous Dominion shows. I do always feel it suffers for being so close to the BOSJ finals, but that is how the company have operated for a while now. The main event between Chris Jericho and IWGP Heavyweight Champion Kazuchika Okada has the potential to be something very special, but I do worry it could just as equally be a massive clash of styles. I certainly wouldn't expect the classic Okada-type match that have been a hallmark of his previous main events or an hour long classic like his bouts with Kenny Omega in the past couple of years at this event. Conventional wisdom suggests that Okada retains, but when Jericho is involved it's impossible to say what might happen and I wouldn't put it beyond Gedo to give Jericho a short run as champion.
Despite it being only a few days away much of the card has only just been announced, but aside from the main heavyweight and junior heavyweight titles, two other singles championships are on the line. Taichi will defend his Never Openweight title against Tomohiro Ishii in what could be a far better match that I'm sure many would predict. Taichi is vastly underrated, and Ishii is always at least solid. The other match we know will almost certainly deliver as we get the rematch between Kota Ibushi and Testsuya Naito for the IWGP Intercontinental title. These two have had many wars in the past, including the big G1 Supercard at Madison Square Garden and I would be stunned if they didn't add another classic to their storied rivalry here.
The rest of the card is the usual mix of tags and six-man tags that are a staple of NJPW undercards, with a couple of stand out matches that have tremendous potential. Jon Moxley defends his newly won US title against Shota Umino, in what wlll almost certainly be a showcase squash for Moxley, but probably putting some shine on Umino too. However, the match that really caught my eye was Shingo vs Satoshi Kojima. I would expect big lariats, and stiff strikes, but also the first step towards Shingo possibly getting himself involved in the heavyweight mix which could b very intriguing indeed. Having seen him for Dragon Gate in the past I can confirm he can do the heavyweight style very well. We'll have more details on what goes down, right here next week.
RIP Atsushi Aoki
In sad news coming out of Japan this week All Japan star Atsushi Aoki was tragically killed in a motorbike accident in Tokyo after colliding with the wall of a tunnel. Aoki had previously wrestled in NJPW competing in the BOSJ and the Super J Cup, but is perhaps best known for his stints in Pro Wrestling Noah (he came up in their dojo and his debut match featured Mitsuhara Misawa and Akira Taue), as well as his later run in AJPW where he was the current Junior Heavyweight champion at the time of his death. While far from a household name Aoki was very well respected within the industry as well as among fans of Japanese professional wrestling, and he had a very unique in-ring style. Passing away at only 41, Aoki will be sorely missed. RIP.
WWE Super Showdown preview
This Friday night WWE will return to Saudi Arabia for Super Showdown. I'm sure I don't need to remind you how controversial these shows are with no women allowed to perform and the company tied into a ten year deal with a government who have a number of dubious policies and a pretty shady track record on human rights among other things. Let's not even get started on freedom of speech, freedom of the press, journalists allegedly being murdered or any number of other reasons to be sour on WWE going to KSA. This show is happening, and there is little we can do to prevent it, as given WWE weathered the backlash when the Jamal Khashoggi scandal happened in Saudi Arabia they will likely be undeterred by much else. As such, I will cover it and we'll try to steer clear of the political elements, although I will say these shows are best thought of as almost "non-canon" and isolated because the atmosphere has so far been a bit bizarre at the first two shows.
Onto the wrestling side of the event the one match that I am looking forward to more than any other is Goldberg vs The Undertaker. On one hand it is absolutely a dream match that would have been incredible twenty years ago. However, it could be an absolute disaster in 2019 and in part I am looking forward to that outcome if that's the way it goes, but if booked correctly this could be a brilliant sprint of a match between two old pros in the style of Goldberg vs Lesnar from Wrestlemania 33. It is quite the curiosity and I can't wait.
Triple H vs Randy Orton will likely be fine but nothing memorable, Braun Strowman vs Bobby Lashley should be a short but very physical, while I expect Lars Sullivan to prevail over The Lucha House Party in pretty dominant fashion. In terms of the two major singles titles matches I don't have high hopes for Seth Rollins vs Baron Corbin or Kofi Kingston vs Dolph Ziggler. I feel like both matches are combinations I've seen far too many times to get excited about. The only thing to potentially get excited about is the possibility of Brock Lesnar cashing in his briefcase, but even that I suspect will be a damp squib if it happens.
Roman Reigns vs Shane McMahon will likely be full of shenanigans, maybe with The Revival and/or Drew McIntyre getting involved. Regardless I imagine this will not be the end of the feud between Shane and Reigns. Finn Balor vs Andrade will almost certainly be the match of the night given both men have been on top form as of late. Finally, there is a 50-man-over-the-top-rope battle royal that will almost certainly be a nostalgia-fest with padded out with the rest of the roster. I do love a battle royal though, so I am quite looking forward to that.
Well, that is it from me for this week. I will be back at the same time next week with a look back at Super Showdown and Dominion, as well as Raw, Smackdown, and whatever else breaks in the meantime. Until then, keep it locked here at Screenjabber for all the best movie, Blu-ray, DVD and video game reviews, as well as all the latest news, podcasts and more. Until next time, so long folks.
Photos: WWE.COM/@NJPW1972/@Alljapan_Eng


text:
URL: https://www.indianz.com/News/archive/000900.asp
NIGC rules against Okla. tribe's casino in Kansas
An Oklahoma tribe's out-of-state casino has been deemed illegal by the National Indian Gaming Commission.
A 24-page opinion issued through the agency's top lawyer rejected the Wyandotte Nation's right to game in downtown Kansas City, Kansas. The tribe has been operating a Class II facility on on a sliver of trust land since August of last year, citing historical ties to the area.
But NIGC's acting general counsel, Penny Coleman, said the land was taken into trust too late and for the wrong reasons. While acknowledging that the tribe exercises jurisdiction over the Shriner Tract -- a key factor in the analysis -- she invoked the Indian Gaming Regulatory Act's ban on gaming on lands acquired after 1988.
The land, Coleman wrote, does not fall within the tribe's "last reservation," it was not acquired as the result of a land claim and it was not restored when the tribe regained federal recognition in 1978. "Therefore, the tribe may not game on the Shriner Tract pursuant to IGRA," she said in the March 24 opinion. [PDF: 1.3 MB]
Reached at his office in Wyandotte, Oklahoma, Chief Leaford Bearskin said NIGC hadn't informed him of its decision, which was accompanied by a letter addressed to him. "I have no comment until I get notified," he said.
Kansas attorney general Phill Kline, though, took it as a victory in his quest to shut the facility down. "We now call upon the Wyandotte Nation to immediately halt gaming activity on the Shriner Tract and to remove all gaming devices to comply with the decision of the NIGC," he said.
Kline's urgency is natural because the state and its four federally-recognized tribes have fought the Wyandotte Nation's gaming plans for several years. The tribes all operate casinos pursuant to compacts with the state.
But Coleman's long-awaited decision has ripples elsewhere because state officials and politicians nationwide are seeking guidance on whether tribes can operate casinos on lands hundreds of miles away from their current reservations or, in some cases, in other states.
Just as the ruling was finalized, a Bureau of Indian Affairs official raised the issue at a Senate hearing on Wednesday. George Skibine, the acting deputy assistant secretary for policy and economic development, said his agency has found nothing in IGRA to limit gaming to existing tribal lands.
Skibine told the Senate Indian Affairs Committee that "it would definitely be an economic benefit to tribes" to acquire off-reservation or out-of-state lands pursuant to a section of IGRA, known as section 2719, that sets out the requirements for these types of acquisitions. In an interview after the hearing, he stressed that there was "no legislative history" on this issue.
But in the decision, Coleman countered that, "This section of IGRA limits, not expands, the right to game. It is clear that Congress intended to allow some gaming to occur on lands acquired after enactment of IGRA under this provision, but specifically disallowed gaming on newly acquired lands far from the current prior reservation."
Affie Ellis, an NIGC spokesperson, wasn't ready to consider the two statements a conflict. "We want to be consistent with what's in section 2719," she said. The Shriner Tract, she noted, "was acquired into trust in 1996 and did not meet any of the exceptions" laid out in the section.
In the Wyandotte Nation's case, that meant first evaluating whether the tribe has jurisdiction over the parcel. Citing a number of governmental actions, including an agreement with the local government, NIGC concluded the tribe indeed exercises authority.
Second, Coleman considered whether the land was in the tribe's "last recognized reservation within the state within which the tribe is presently located." Since the tribe is "presently located" in Oklahoma, where its headquarters are based, she determined that this exception was not met.
Next, NIGC looked at whether the tribe could satisfy the land claim exception. The tribe did purchase the tract with settlement funds but Coleman said the funds were awarded by the Indian Claims Commission, whose purpose was "to ascertain money damages" -- not award land.
Finally, Coleman examined whether the land qualifies as "restored" since the tribe, after being terminated in 1956, regained federal recognition in 1978. Section 2719 provides an exception for restored tribes.
But the tribe does not meet the test due to the 18-year gap between restoration and the Shriner Tract purchase, Coleman said. While the long wait is not a complete bar, she acknowledged, the fact that the tribe received trust land in Oklahoma in in interim detracted from the tribe's case.
Also, Coleman said the tribe has no "historical nexus" to the land even though tribal ancestors are buried in the cemetery. She argued that the tribe lived in the Kansas City area for less than a decade before being removed to Oklahoma.
Coleman's accompanying letter to Chief Bearskin gave the tribe a week to respond to the opinion. Ellis said the agency would evaluate its next step once the response is received.
Get the Decision:
Legality of Gaming under the IGRA on the Shriner Tract owned by the Wyandotte Tribe (March 24, 2003)
Other Documents:
BIA: Reconsideration on Wyandotte lands (June 12, 2003)
Wyandotte Nation of Oklahama - http://www.wyandotte-nation.org/home.html
BIA issues decision on Wyandotte land in Kan. (07/25)
Column: 'Bad business deal' with tribe (11/12)
Wyandotte casino agreement approved (11/08)
Bush asked to oppose tribal land bill (10/25)
Casino money donated in Kan. race (10/24)
Kan. tribe blasts casino settlement bill (10/11)
Bill to settle land claim for casino (10/10)
Class action sought on land claim (08/27)
Column: Hostility at land claim forum (08/14)
Forum on Wyandotte lawsuit planned (08/06)
Kan. landowners served with tribe's suit (7/19)
Wyandotte land claim still alive (5/10)
Wyandotte trust land notice clarified (5/9)
In The Hoop: Oops!(5/8)
Wyandotte Nation to remove slots (5/1)
Is Wyandotte chief bluffing on casino? (4/26)
Wyandotte Nation moves on casino (4/18)
Wyandotte Tribe brazen on casino (4/17)
Kansas casino battle continues (4/15)
Okla. tribe brings slots to Kansas (4/12)
McCaleb affirms trust land decision (3/12)
Supreme Court refuses Wyandotte review (1/7)
Congress kills Wyandotte casino project (10/15)
Wyandotte company awarded $100M contract (8/17)
Sides prepare for land claim battle (6/21)
Battle over Kansas casino continues (2/28)
Wyandotte Nation sues over gaming (9/22)
Tribes oppose casino (9/15)
Copyright Indianz.Com

redpajama_set_name: RedPajamaCommonCrawl


"Saint-Simon" is composed of at least 2 distinct authors, divided by their works.
Works have been aliased into duc de Saint-Simon.
"Saint-Simon" is composed of at least 2 distinct authors, divided by their works. You can edit the division.
Saint-Simon is composed of 2 names. You can examine and separate out names.


text:
Ó Caoláin - Publish Barron Report without delay
As the Report of Justice Barron on the Dublin and Monaghan bombings and a number of other tragedies in the 26 Counties arising from the conflict in the North, is presented to the government today, Sinn Féin Dáil leader Caoimhghín Ó Caoláin has called for its publication "without delay". He said:
"There must be no delay in the publication of a Report which is long overdue, mainly because of the refusal of the British authorities to fully co-operate with the work of Justice Barron. In addition to the 33 people killed in the Dublin and Monaghan bombings of May 1974, some 14 other people were killed in the 26 Counties in incidents where direct involvement of British forces or collusion with loyalists is strongly indicated. I understand many of these tragedies have been examined by Justice Barron.
"The Government should publish the report without further delay. The Oireachtas Committee hearings should then proceed. It must not be forgotten that the just demand of the relatives is still for a public inquiry and I re-iterate my support for that call."ENDS


text:
Americans Are Leaving Democrat-Run States, Moving to Republican Ones, Study Shows
United Van Lines reveals masses are people are flocking to conservative states
Americans are leaving Democrats-run states in droves and moving to Republican-led ones instead, a new survey has revealed.
The newly published study tracks migration patterns in the United States and discovered that people are leaving states and cities run by Democrats.
Instead, Americans are flocking to Republican-dominant areas in a trend that appears to have been accelerated by the coronavirus pandemic.
The shift was noted in the annual study conducted by United Van Lines, the nation's largest mover of household goods.
It found that in 2020, Americans continued the trend of ditching northeastern and West Coast liberal states.
A growing number of people are choosing to live in southeastern and Sun Belt states instead.
According to the group's data, which is based on household moves handled by United, the 10 states with the highest inbound rates were as follows:
1, Idaho
2, South Carolina
3, Oregon
4, South Dakota
5, Arizona
6, North Carolina
7, Tennessee
8, Alabama
9, Florida
10, Arkansas
The trend is patently obvious: Nearly all the states with the highest inbound rates are predominantly run by Republicans and consistently vote Republican.
On the other hand, the study found that states with the highest outbound rates were predominantly run by Democrats.
Here's the list:
1, New Jersey
2, New York
3, Illinois
4, Connecticut
5, California
6, Kansas
7, North Dakota
8, Massachusetts
9, Ohio
10, Maryland
Near the top of the list for highest outbound rate was deep blue New York, a state that has been suffering from steady population decline for years and in 2022 could lose a House seat — or two.
The trends were not isolated to states either, but the study found the same pattern existed when examining inbound and outbound rates among U.S. cities.
Commenting on the study, Michael A. Stoll, an economist and professor in the Department of Public Policy at the University of California, Los Angeles, noted that the coronavirus pandemic was a huge factor in this year's moving patterns.
"We're seeing that the COVID-19 pandemic has without a doubt accelerated broader moving trends, including retirement driving top inbound regions as the Baby Boomer generation continues to reach that next phase of life," Stoll said in the news release.
Eily Cummings, director of corporate communications at United Van Lines, added, "As more people experience job and lifestyle changes amid the pandemic like remote working, we're seeing they have more flexibility in where they can live — many choosing to move from urban to more rural areas."
However, in its coverage of the news, the Daily Wire noted that while the pandemic may have accelerated the exodus from Democratic states and cities, the trend has been ongoing for a while and it mostly has to do with bad Democratic policies.
Here's what reporter Cabot Phillips said:
Residents in New York have the highest tax burden of any state in the country. Connecticut is the sixth-worst, New Jersey the seventh-worst, and Illinois the ninth-worst.
By contrast, every single city on the "moving to" list is in a red conservative state with a tax burden well below the national average. Florida, for example, has the fourth-lowest tax burden, with Tennessee having the second-lowest, Alabama having the eighth-lowest, and Idaho having the thirteenth lowest.
That's not a coincidence.
Perhaps if Democrat politicians weren't taxing their constituents so heavily, they might stick around instead of fleeing for warmer (and redder) climates.
People may not always vote with their pocketbooks, but they do move with their pocketbooks.
[RELATED] Indiana Mayor Dumps Democrats, Joins Republicans: 'I Must Be True to My God'


Interesting reflection, Valerie. I like the idea that projects – a.k.a. the 'coal face', or 'front-line' – are the key space for you to build relationships, connections, both inside and outside the organisation.
Inside projects, goals and deadlines often have firmer boundaries, compared to business as usual effort. As a goal-driven type, I too thrive in these situations. Projects are often a lively space, with unpredictable events. This is something that I feel supports my own creative thinking or doing … I'm certainly not one who craves repetition!
In terms of projects being the blocker for change, as Julian suggested, I think while that can be true in some situations, in a truly AGILE, or CONTINUOUS DELIVERY project, the PROJECT IS DRIVEN BY CHANGE. Real-world feedback from those the project is aimed at, based on their real needs and experiences, so often drives unexpected outcomes, while continuously driving in the direction of value.
Agile projects, run on Agile Principles (rather than strict PM frameworks) give us a new way to to consider requirements, aims, budgets, end consumers, and team boundaries. They also has clear, very short term, iterative and testable goals. Daily or even hourly validation of the direction.
Is this a better approach for those of us driven by goals and deadlines?
I wonder if this is this the new project approach that Julian is looking for?


text:
Q: if (isset($_POST[ echo $_POST I need help with some coding.
I watched some tutorials from W3Schools and youtube, but I just don't get it.
<!DOCTYPE html>
<?php
if (isset($_POST["Push me"]))

echo $_POST['name']
?>

Registration
<form action="/action_page.php" method="get" target="_blank">
  Insert name <input type="text" name="fname">

  <input type="submit" value="Push me">

</form>

When you push the button there should be a name that was typed into the field.
Example:
If you enter the name Simon after pushing the button it should write Hello Simon under the button

A: if (isset($_POST["fname"]))
//                ^^^^^

echo $_POST['fname'];
//           ^^^^^  ^

<form action="/action_page.php" method="post" target="_blank">
//                                      ^^^^

A: *

*Your PHP code is out of the HTML tag, I have place the php code in the DIV under the button, i.e. to display "Hello xxxTheNameYouEnterInTheInputxxx"

*The if condition in your PHP code should be like if(isset($_POST["fname"])) instead of if(isset($_POST["Push me"]))
i.e. $_POST["NameOfTheInputElementInTheForm"]

*<form action="/action_page.php" method="get" target="_blank"> should be like <form action="/test.php" method="POST"> i.e. Method is POST and action should be the name of the file, remove target="_blank"
Here is the full code, save it as test.php
<!DOCTYPE html>

        Registration
        <form action="/test.php" method="POST">
            Insert Name: <input type="text" name="fname">

            <input type="submit" value="Push me">
        </form>

            <?php
                if (isset($_POST["fname"])){
                    echo "Hello " . $_POST['fname'];
                }
            ?>

redpajama_set_name: RedPajamaStackExchange


Power Magnified is a sealed prophecy.
+(10-30) to IntelligenceIf it's worth doing once, it's worth doing twice. in each hand only upgrades the primary hand.
+(10-30) to IntelligenceNo one likes a quiet encore. upon completion.


BCF : Rohingya Muslim militants in Myanmar killed dozens of Hindu civilians during attacks last August, according to an investigation by Amnesty International.
The group called Arsa killed up to 99 Hindu civilians in one, or possibly two massacres, said the rights group. Arsa had denied involvement. The killings came in the first days of an uprising against Burmese forces, who are also accused of atrocities.
Since August nearly 700,000 Rohingyas and others have fled the violence. The conflict has also displaced members of the majority Buddhist population in Myanmar (also called Burma) as well as members of the Hindu minority.
Amnesty says interviews it conducted with refugees in Bangladesh and in Rakhine state confirmed that mass killings carried out by the Arakan Rohingya Salvation Army (Arsa) took place in a cluster of villages in northern Maungdaw Township at the time of its attacks on police posts in late August. The findings also show Arsa was responsible for violence against civilians, on a smaller scale, in other areas.


text:
23-я сессия Комитета всемирного наследия ЮНЕСКО проходила с 29 ноября по 4 декабря 1999 года, в Марракеше, Марокко. Было подано 48 объектов в список всемирного наследия ЮНЕСКО. 35 объектов культурного, 2 смешанного и 11 природного наследия. Таким образом, общее число регистраций достигло 630 (479 культурного, 22 смешанного и 129 природного наследия).

Объекты, внесённые в список всемирного наследия

Культурное наследие
 Аргентина: Куэва-де-лас-Манос
 Бельгия: Колокольни Бельгии и Франции (расширена в 2005 году, во Франции)
 Бразилия: Исторический центр Диамантина
 Китай: Рисунки Дацзу
 Куба: Долина Виньялес
 Германия: Музейный остров в Берлине
 Германия: Замок Вартбург
 Эквадор: Исторический центр Куэнка
 Филиппины: Исторический город Виган
 Финляндия: Кладбище Саммаллахденмяки Бронзового века
 Франция: Сент-Эмильон
 Греция: Древние города Микены и Тиринф
 Греция: Исторический центр (Хора) с монастырём Иоанна «Богослова» и пещерой Апокалипсиса на острове Патмос
 Венгрия: Хортобадь - Пуста
 Индия: Горные железные дороги Индии (расширена в 2005 и 2008 годах)
 Италия: Вилла Адриана, Тиволи
 Япония: Никко
 Мексика: Исторический укреплённый город Сан-Франсиско-де-Кампече
 Мексика: Археологические памятники зоны Шочикалько
 Нидерланды: Бемстер
 Нигерия: Сукур
 Австрия: Город Грац - исторический центр и замок Eggenberg (продлён в 2010 году)
 Польша: Кальваря-Зебжидовская маньеризм архитектурно-паркового комплекса ландшафтов и паломнической церкви
 Румыния: Исторический центр Сигишоара
 Румыния: Даки укрепления Орастигебергте
 Румыния: Деревянные церкви исторической области Марамуреш
 Сент-Китс и Невис: Национальный парк Brimstone Hill Fortress
 Испания: Сан-Кристобаль-де-ла-Лагуна
 Чехия: Замок Литомишль
 Туркменистан: Исторический и культурный парк Старый Мерв
 Великобритания: Памятники неолита на Оркнейских островах
 Вьетнам: Исторический город Хойан
 Вьетнам: Святилище Мишон
 ЮАР: Роббенэйланд
 ЮАР: Участки с окаменелостями гоминид в Пещерах Стеркфонтейн, Сварткранса, Кромдраай и окружающей среды (продлён в 2005 году)

Смешанное наследие
 Китай: Горы Уишань
 Испания: Ибица биоразнообразие и культура

Природное наследие
 Аргентина: Вальдес
 Бразилия: Лесные резерваты восточного атлантического побережья («Берег открытия»)
 Бразилия: Лесные резерваты юго-восточного атлантического побережья
 Канада: Национальный парк Мигуаша
 Коста Рика: Особо охраняемая природная территория Гуанакасте (расширена в 2004 году)
 Куба: Национальный парк Десембарко-дель-Гранма
 Филиппины: Подземная река Пуэрто-Принсеса
 Индонезия: Национальный парк Лоренц
 Португалия: Монтеверде - лавровые леса острова Мадейре
 Россия: Западный Кавказ
 ЮАР: Водно-болотный район Исимангалисо

Расширены
 Албания: Бутринти (Первоначально признан в 1992 году, как культурное наследие)
 Германия: Дворцы и парки Потсдама и Берлина (Первоначально признан в 1990 году, как культурное наследие, впервые расширено в 1992 году)
 Франция / Испания: Перинеи-Монте-Пердидо (первоначально признан смешанным наследием в 1997 году)
 Италия: город в эпоху Возрождение около реки По (Первоначально признан в 1995 году, как культурное наследие)
 Румыния: Деревни Веркирхе в Трансильваний (Первоначально признан в 1993 году, как культурное наследие)

Убраны из Красного списка
Ни один объект, не был убран из списка.

Добавлены в Красный список
 Национальный парк Игуасу в Бразилии (В красном списке до 2001 года)
 Национальный парк Салонга в Демократической Республике Конго (в красном списке до 2021 года)
 Национальный парк Рувензори на границе Уганды и Демократической Республике Конго (В красном списке до 2004 года)
 Памятники Хампи, Индия (В красном списке до 2006 года)

Ссылки
Convention concerning the protection of the world cultural and natural heritage - World Heritage Committee - Twenty-third Session - Report

redpajama_set_name: RedPajamaWikipedia


CandyLorelay LaniLane jasmin. Deedra. brandonandgirls. xxxPerfectcouple.
jonny21SexySparksYoselinLatinaXiaraDreams .asianvietnameseAizaShapeKissBriannaJEANNandTONNY .JEANNandTONNYBeMyOwnerXXHanno91LORRYKATxxx .JohnfantasyYoselinLatinaKissBriannaSweetTenderneSS .GinaaBBJosySummersMayaStarxxxUnito .PoleChainEbony10InchSXlucianaasshotSandyMorgan .CatelynVersRayibrandonandgirlslucianaasshot .lucianaasshota0DominantLadAnellaXEvaSoul .HornyAnastasyaBruceCoxUnitoblackceejay91 .Rayia0DominantLadGinaaBBDerekkK .VixieVanderaniastarxxxSweetTenderneSSViolaGoddes .
GinaaBBMaxRhianneXXasianvietnameseAmazingass4u21 .VALERY020GinaHot1sexman1965MalenaSun .MaxRhianneXXStormPassionYoselinLatinaa0DominantLad .xANGELOFCUMMxSweetpixie27mimimefiXxxsexxykittenxx .AmberlyRosseVixieVanderaBarbieBitch696VINCENTX2 .DaiseyChainDUOSEXYFRINGMayaGreyVALERY020 .CatelynVersBRADLEYTUCKERLeonaAsheMIkeDeWitt .lusciousAVAasianvietnameseBruceCoxLeilaBlondi .RayiClaudiaKISSBeMyOwnerXXDaiseyChain .SandyMorganYoselinLatinaVALERY020JosySummers .AmberlyRosseDerekkKGinaHot1MayaGrey .


The registration staff of the Conference Services office are now a part of the Community Engagement team within Academic Affairs. This move was made to allow our office to better serve academic clients who are in need of registration services for their events and programs. Our focus is to provide services for conferences, events, and continuing education courses throughout the year, with a special focus on summer programs including: youth enrichment programs, regional and national conference, and student enrichment opportunities. We have re-tiered our fees on a sliding scale based on the scope of the conference or program, and all fee levels include the same benefits.
*In addition to the per registration fee, there is a 3% credit card recovery fee.
**In the event that there are more than 250 anticipated registrants, the fee will increase to the $5 tier.
-Custom, dedicated registration page, available upon request.
-Event and/or course will be entered in UNCW's event Management System (eliminating this step in the planning process).
-Management of all payment processing - credit card, check and cash - and deposits.
-Regular reporting on registration status and monetary return on programming, including final reports prepared just before the event is to take place.
-Customized name tags printed for event registrants.
-A final revenue and enrollment summary will be submitted for review before billing for services rendered.
Please contact Jonathan Watkins, Registration Manager, at 910.962.3195 or watkinsmj@uncw.edu for more information or to schedule an appointment. We look forward to serving our campus community, in this new capacity, to meet all your registration needs.


text:
if(NOT WIN32)
    string(ASCII 27 Esc)
    set(ColorReset  "${Esc}[m")
    set(ColorBold   "${Esc}[1m")
    set(Red         "${Esc}[31m")
    set(Green       "${Esc}[32m")
    set(Yellow      "${Esc}[33m")
    set(Blue        "${Esc}[34m")
    set(Magenta     "${Esc}[35m")
    set(Cyan        "${Esc}[36m")
    set(White       "${Esc}[37m")
    set(BoldRed     "${Esc}[1;31m")
    set(BoldGreen   "${Esc}[1;32m")
    set(BoldYellow  "${Esc}[1;33m")
    set(BoldBlue    "${Esc}[1;34m")
    set(BoldMagenta "${Esc}[1;35m")
    set(BoldCyan    "${Esc}[1;36m")
    set(BoldWhite   "${Esc}[1;37m")
endif()

# ------------------------------------------------------------------------------
# Macro File List
# ------------------------------------------------------------------------------

macro(add_project_include FILE)
    set(PROJECT_INCLUDE_LIST "${PROJECT_INCLUDE_LIST}|${FILE}")
endmacro(add_project_include)

# ------------------------------------------------------------------------------
# include_external_extensions
# ------------------------------------------------------------------------------

macro(include_external_extensions)
    foreach(e ${EXTENSION})
        if(NOT IS_ABSOLUTE "${e}")
            get_filename_component(e "${BUILD_ROOT_DIR}/${e}" ABSOLUTE)
        endif()
        if(EXISTS "${e}/CMakeLists.txt")
            message(STATUS "Extension: ${e}")
            include(${e}/CMakeLists.txt)
        else()
            message(FATAL_ERROR "Extension not found: ${e}")
        endif()
    endforeach(e)
endmacro(include_external_extensions)

# ------------------------------------------------------------------------------
# generate_flags
# ------------------------------------------------------------------------------

# Generate Flags
#
# Sets up CMAKE_C_FLAGS and CMAKE_CXX_FLAGS based on the provided flags and
# prefix value. Each time this is executed, CMAKE_XXX_FLAGS are overwritten
# and globally set. The add_subproject function performs this action on your
# behalf, and this function generally should not be used unless you are
# compiling a dependency, in which case, you will need to run this manually.
#
# @param PREFIX (macro arg) Defines which prefix the flags belong too. Valid
#     values are: vmm, userspace, and test
# @param C_FLAGS Additional C flags to add to CMAKE_C_FLAGS
# @param CXX_FLAGS Additional CXX flags to add to CMAKE_CXX_FLAGS
#
function(generate_flags PREFIX)
    set(options NOWARNINGS)
    set(multiVal C_FLAGS CXX_FLAGS)
    cmake_parse_arguments(ARG "${options}" "" "${multiVal}" ${ARGN})

    list(APPEND _C_FLAGS ${ARG_C_FLAGS} $ENV{C_FLAGS})
    list(APPEND _CXX_FLAGS ${ARG_CXX_FLAGS} $ENV{CXX_FLAGS})

    if(PREFIX STREQUAL "vmm")
        list(APPEND _C_FLAGS ${BFFLAGS_VMM} ${BFFLAGS_VMM_C} ${C_FLAGS_VMM})
        list(APPEND _CXX_FLAGS ${BFFLAGS_VMM} ${BFFLAGS_VMM_CXX} ${CXX_FLAGS_VMM})
        if(${BUILD_TARGET_ARCH} STREQUAL "x86_64")
            list(APPEND _C_FLAGS ${BFFLAGS_VMM_X86_64})
            list(APPEND _CXX_FLAGS ${BFFLAGS_VMM_X86_64})
        endif()
        if(${BUILD_TARGET_ARCH} STREQUAL "aarch64")
            list(APPEND _C_FLAGS ${BFFLAGS_VMM_AARCH64})
            list(APPEND _CXX_FLAGS ${BFFLAGS_VMM_AARCH64})
        endif()
    elseif(PREFIX STREQUAL "userspace")
        list(APPEND _C_FLAGS ${BFFLAGS_USERSPACE} ${BFFLAGS_USERSPACE_C} ${C_FLAGS_USERSPACE})
        list(APPEND _CXX_FLAGS ${BFFLAGS_USERSPACE} ${BFFLAGS_USERSPACE_CXX} ${CXX_FLAGS_USERSPACE})
        if(${BUILD_TARGET_ARCH} STREQUAL "x86_64")
            list(APPEND _C_FLAGS ${BFFLAGS_USERSPACE_X86_64})
            list(APPEND _CXX_FLAGS ${BFFLAGS_USERSPACE_X86_64})
        endif()
        if(${BUILD_TARGET_ARCH} STREQUAL "aarch64")
            list(APPEND _C_FLAGS ${BFFLAGS_USERSPACE_AARCH64})
            list(APPEND _CXX_FLAGS ${BFFLAGS_USERSPACE_AARCH64})
        endif()
    elseif(PREFIX STREQUAL "test")
        list(APPEND _C_FLAGS ${BFFLAGS_TEST} ${BFFLAGS_TEST_C} ${C_FLAGS_TEST})
        list(APPEND _CXX_FLAGS ${BFFLAGS_TEST} ${BFFLAGS_TEST_CXX} ${CXX_FLAGS_TEST})
        if(${BUILD_TARGET_ARCH} STREQUAL "x86_64")
            list(APPEND _C_FLAGS ${BFFLAGS_TEST_X86_64})
            list(APPEND _CXX_FLAGS ${BFFLAGS_TEST_X86_64})
        endif()
        if(${BUILD_TARGET_ARCH} STREQUAL "aarch64")
            list(APPEND _C_FLAGS ${BFFLAGS_TEST_AARCH64})
            list(APPEND _CXX_FLAGS ${BFFLAGS_TEST_AARCH64})
        endif()
        if(ENABLE_ASAN)
            list(APPEND _C_FLAGS ${BFFLAGS_ASAN})
            list(APPEND _CXX_FLAGS ${BFFLAGS_ASAN})
        endif()
        if(ENABLE_USAN)
            list(APPEND _C_FLAGS ${BFFLAGS_USAN})
            list(APPEND _CXX_FLAGS ${BFFLAGS_USAN})
        endif()
        if(ENABLE_CODECOV)
            list(APPEND _C_FLAGS ${BFFLAGS_CODECOV})
            list(APPEND _CXX_FLAGS ${BFFLAGS_CODECOV})
        endif()
    elseif(PREFIX STREQUAL "efi")
        list(APPEND _C_FLAGS ${BFFLAGS_EFI} ${BFFLAGS_EFI_C} ${C_FLAGS_EFI})
        list(APPEND _CXX_FLAGS ${BFFLAGS_EFI} ${BFFLAGS_EFI_CXX} ${CXX_FLAGS_EFI})
        if(${BUILD_TARGET_ARCH} STREQUAL "x86_64")
            list(APPEND _C_FLAGS ${BFFLAGS_EFI_X86_64})
            list(APPEND _CXX_FLAGS ${BFFLAGS_EFI_X86_64})
        endif()
        if(${BUILD_TARGET_ARCH} STREQUAL "aarch64")
            list(APPEND _C_FLAGS ${BFFLAGS_EFI_AARCH64})
            list(APPEND _CXX_FLAGS ${BFFLAGS_EFI_AARCH64})
        endif()
    else()
        message(FATAL_ERROR "Invalid prefix: ${PREFIX}")
    endif()

    if(NOT ARG_NOWARNINGS)
        if(ENABLE_COMPILER_WARNINGS)
            list(APPEND _C_FLAGS ${BFFLAGS_WARNING_C})
            list(APPEND _CXX_FLAGS ${BFFLAGS_WARNING_CXX})
        endif()

        if(CMAKE_BUILD_TYPE STREQUAL "Release")
            if(NOT WIN32)
                list(APPEND _C_FLAGS -Werror)
                list(APPEND _CXX_FLAGS -Werror)
            else()
                list(APPEND _C_FLAGS /WX)
                list(APPEND _CXX_FLAGS /WX)
            endif()
        endif()
    endif()

    string(REPLACE ";" " " _C_FLAGS "${_C_FLAGS}")
    string(REPLACE ";" " " _CXX_FLAGS "${_CXX_FLAGS}")

    set(CMAKE_C_FLAGS ${_C_FLAGS} PARENT_SCOPE)
    set(CMAKE_CXX_FLAGS ${_CXX_FLAGS} PARENT_SCOPE)
endfunction(generate_flags)

# ------------------------------------------------------------------------------
# include_dependency
# ------------------------------------------------------------------------------

# Private
#
macro(include_dependency DIR NAME)
    include(${${DIR}}/${NAME}.cmake)
endmacro(include_dependency)

# ------------------------------------------------------------------------------
# download_dependency
# ------------------------------------------------------------------------------

# Download Dependency
#
# Downloads a dependency from a URL. Dependencies can either be
# a tarball or a zip file. These downloaded files are placeed in the CACHE_DIR.
# If the provided MD5 hash does not match, the cached download is redownloaded.
#
# @param NAME the name of the dependency
# @param URL The URL for the dependency
# @param URL_MD5 The MD5 of the file being downloaded
# @param PREFIX An optional prefix. This is only needed if downloading the
#     dependency is the only required step, in which case this function will
#     create the custom target for dependency tracking.
#
function(download_dependency NAME)
    set(oneVal URL URL_MD5 GIT_REPOSITORY GIT_TAG PREFIX)
    cmake_parse_arguments(ARG "" "${oneVal}" "" ${ARGN})

    set(SRC ${CACHE_DIR}/${NAME})

    if(ARG_URL)
        if(NOT ARG_URL_MD5)
            message(FATAL_ERROR "Invalid URL MD5: ${ARG_URL_MD5}")
        endif()

        string(REGEX REPLACE "\\.[^.]*$" "" FILENAME ${ARG_URL})
        string(REPLACE "${FILENAME}" "" EXT ${ARG_URL})
        get_filename_component(LONG_EXT ${ARG_URL} EXT)
        if(NOT LONG_EXT MATCHES "(\\.|=)(7z|tar\\.bz2|tar\\.gz|tar\\.xz|tbz2|tgz|txz|zip)$")
            message(FATAL_ERROR "Unsupported file format: ${ARG_URL}")
        endif()

        if(LONG_EXT MATCHES ".tar.gz$")
            set(EXT ".tar.gz")
        endif()

        if(LONG_EXT MATCHES ".tar.xz$")
            set(EXT ".tar.xz")
        endif()

        if(LONG_EXT MATCHES ".tar.bz2$")
            set(EXT ".tar.bz2")
        endif()

        set(TMP ${CACHE_DIR}/${NAME}_tmp)
        set(TAR ${CACHE_DIR}/${NAME}${EXT})

        # TODO
        #
        # If a dependency needs to be downloaded, currently, we remove the
        # source directory which forces a recompile. We need to verify that
        # when this happens, all of the targets that rely on this dependency
        # are also recompiled / relinked.
        #

        foreach(ATTEMPT RANGE 1 5 1)
            if(EXISTS "${TAR}")
                message(STATUS "    checking hash: ${ARG_URL_MD5}")
                file(MD5 ${TAR} MD5)
                if(NOT "${MD5}" STREQUAL "${ARG_URL_MD5}")
                    message(STATUS "    ${Red}md5 mismatch: expecting ${ARG_URL_MD5}, got ${MD5}${ColorReset}")
                    set_property(GLOBAL PROPERTY "FORCE_REBUILD" "ON")
                    file(REMOVE_RECURSE ${SRC})
                    file(REMOVE_RECURSE ${TMP})
                    file(REMOVE_RECURSE ${TAR})
                    message(STATUS "    checking hash: ${Yellow}complete, redownload required${ColorReset}")
                else()
                    message(STATUS "    checking hash: ${Green}complete${ColorReset}")
                    break()
                endif()
            endif()

            if(ATTEMPT GREATER 1)
                message(STATUS "    attempt: ${ATTEMPT}")
            endif()

            message(STATUS "    download file: ${ARG_URL} -> ${TAR}")
            file(DOWNLOAD ${ARG_URL} ${TAR} STATUS DOWNLOAD_STATUS)
            if(NOT DOWNLOAD_STATUS MATCHES "0;")
                message(STATUS "    ${Red}failed to download ${ARG_URL}${ColorReset}")
                file(REMOVE_RECURSE ${TAR})
                continue()
            endif()
            message(STATUS "    download file: ${Green}complete${ColorReset}")
        endforeach()

        if(EXISTS ${TAR})
            file(MD5 ${TAR} MD5)
            if(NOT "${MD5}" STREQUAL "${ARG_URL_MD5}")
                message(FATAL_ERROR "Failed to download ${ARG_URL} with md5 hash of ${ARG_URL_MD5}")
            endif()
        else()
            message(FATAL_ERROR "Failed to download ${ARG_URL} with md5 hash of ${ARG_URL_MD5}")
        endif()

        if(NOT EXISTS "${SRC}")
            file(REMOVE_RECURSE ${TMP})
            file(REMOVE_RECURSE ${SRC})
            file(MAKE_DIRECTORY ${TMP})

            execute_process(
                COMMAND ${CMAKE_COMMAND} -E tar xfz ${TAR}
                WORKING_DIRECTORY ${TMP}
            )

            file(GLOB CONTENTS "${TMP}/*")

            list(LENGTH CONTENTS LEN)
            if(NOT LEN EQUAL 1 OR NOT IS_DIRECTORY ${CONTENTS})
                message(FATAL_ERROR "Invalid tarball: ${ARG_URL}")
            endif()

            get_filename_component(CONTENTS ${CONTENTS} ABSOLUTE)
            execute_process(
                COMMAND ${CMAKE_COMMAND} -E rename ${CONTENTS} ${SRC}
            )

            file(REMOVE_RECURSE ${TMP})
        endif()
    endif()

    if(ARG_GIT_REPOSITORY)
        if(ARG_GIT_TAG)
            set(ARG_GIT_TAG -b ${ARG_GIT_TAG})
        endif()
        if(NOT EXISTS "${SRC}")
            execute_process(COMMAND git clone ${ARG_GIT_REPOSITORY} ${ARG_GIT_TAG} ${SRC})
        endif()
    endif()

    if(ARG_PREFIX)
        if(ARG_PREFIX STREQUAL "vmm")
            add_custom_target(${NAME}_${VMM_PREFIX})
        elseif(ARG_PREFIX STREQUAL "userspace")
            add_custom_target(${NAME}_${USERSPACE_PREFIX})
        elseif(ARG_PREFIX STREQUAL "test")
            add_custom_target(${NAME}_${TEST_PREFIX})
        else()
            message(FATAL_ERROR "Invalid prefix: ${PREFIX}")
        endif()
    endif()
endfunction(download_dependency)

# ------------------------------------------------------------------------------
# add_dependency
# ------------------------------------------------------------------------------

# Add Dependency
#
# Uses ExternalProject_Add to add the dependency to the build. All of the
# optional arguments are passed directly to ExternalProject_Add, so most of
# ExternalProject_Add's options are supported by this function.
#
# @param NAME the name of the dependency
# @param PREFIX the prefix this dependency belongs too. Valid values are:
#     vmm, userspace and test.
#
function(add_dependency NAME PREFIX)
    if(PREFIX STREQUAL "vmm")
        set(PREFIX ${VMM_PREFIX})
    elseif(PREFIX STREQUAL "userspace")
        set(PREFIX ${USERSPACE_PREFIX})
    elseif(PREFIX STREQUAL "test")
        set(PREFIX ${TEST_PREFIX})
    elseif(PREFIX STREQUAL "efi")
        set(PREFIX ${EFI_PREFIX})
    else()
        message(FATAL_ERROR "Invalid prefix: ${PREFIX}")
    endif()

    if(EXISTS "${CACHE_DIR}/${NAME}/CMakeLists.txt")
        list(APPEND ARGN
            CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PREFIXES_DIR}/${PREFIX}
            CMAKE_ARGS -DCMAKE_INSTALL_MESSAGE=${CMAKE_INSTALL_MESSAGE}
            CMAKE_ARGS -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE}
        )
        if(NOT WIN32 AND NOT CMAKE_GENERATOR STREQUAL "Ninja")
            list(APPEND ARGN
                CMAKE_ARGS -DCMAKE_TARGET_MESSAGES=${CMAKE_TARGET_MESSAGES}
            )
        endif()
        if(NOT WIN32)
            list(APPEND ARGN
                CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
            )
            list(APPEND ARGN LOG_DIR ${DEPENDS_DIR}/${NAME}/${PREFIX}/stamp)
        endif()
    else()
        list(APPEND ARGN
            LOG_CONFIGURE 1
            LOG_BUILD 1
            LOG_INSTALL 1
        )
    endif()

    add_custom_command(
        TARGET clean-all
        COMMAND ${CMAKE_COMMAND} -E remove_directory ${DEPENDS_DIR}/${NAME}
    )

    add_custom_command(
        TARGET clean-depends
        COMMAND ${CMAKE_COMMAND} -E remove_directory ${DEPENDS_DIR}/${NAME}
    )

    # TODO
    #
    # As a post install step, we need to touch a file that states that the
    # dependency has been compiled. If this is the case, we would then only
    # run the install step, skipping the compile step. This should allow us
    # to move the depends directory outside of the build tree and safely use
    # it for future compilations.
    #

    ExternalProject_Add(
        ${NAME}_${PREFIX}
        ${ARGN}
        PREFIX              ${DEPENDS_DIR}/${NAME}/${PREFIX}
        STAMP_DIR           ${DEPENDS_DIR}/${NAME}/${PREFIX}/stamp
        TMP_DIR             ${DEPENDS_DIR}/${NAME}/${PREFIX}/tmp
        BINARY_DIR          ${DEPENDS_DIR}/${NAME}/${PREFIX}/build
        SOURCE_DIR          ${CACHE_DIR}/${NAME}
    )

    ExternalProject_Add_Step(
        ${NAME}_${PREFIX}
        ${NAME}_${PREFIX}_cleanup
        COMMAND ${CMAKE_COMMAND} -E remove_directory ${DEPENDS_DIR}/${NAME}/${PREFIX}/src
        DEPENDEES configure
    )
endfunction(add_dependency)

# Add Dependency Step
#
# Uses ExternalProject_Add_Step to add an additional step to external project
# add after "install" is executed by ExternalProject_Add. Only one additional
# step is supported. Like add_dependency, add_dependency_step passes all
# optional parameters to ExternalProject_Add_Step, so most options are
# supported.
#
# @param NAME the name of the dependency
# @param PREFIX the prefix this dependency belongs too. Valid values are:
#     vmm, userspace and test.
#
function(add_dependency_step NAME PREFIX)
    if(PREFIX STREQUAL "vmm")
        set(PREFIX ${VMM_PREFIX})
    elseif(PREFIX STREQUAL "userspace")
        set(PREFIX ${USERSPACE_PREFIX})
    elseif(PREFIX STREQUAL "test")
        set(PREFIX ${TEST_PREFIX})
    elseif(PREFIX STREQUAL "efi")
        set(PREFIX ${EFI_PREFIX})
    else()
        message(FATAL_ERROR "Invalid prefix: ${PREFIX}")
    endif()

    ExternalProject_Add_Step(
        ${NAME}_${PREFIX}
        step_${NAME}_${PREFIX}
        ${ARGN}
        DEPENDEES install
    )
endfunction(add_dependency_step)

# ------------------------------------------------------------------------------
# add_targets
# ------------------------------------------------------------------------------

# Private
#
function(add_tidy_targets NAME PREFIX SOURCE_DIR)
    if(PREFIX STREQUAL "vmm")
        set(PREFIX ${VMM_PREFIX})
    elseif(PREFIX STREQUAL "userspace")
        set(PREFIX ${USERSPACE_PREFIX})
    elseif(PREFIX STREQUAL "test")
        set(PREFIX ${TEST_PREFIX})
    endif()

    if(NOT EXISTS "${SOURCE_DIR}")
        return()
    endif()

    add_custom_command(
        TARGET tidy
        COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/${NAME}/${PREFIX}/build
            ${TIDY_SCRIPT} diff ${SOURCE_DIR}
    )

    add_custom_command(
        TARGET tidy-all
        COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/${NAME}/${PREFIX}/build
            ${TIDY_SCRIPT} all ${SOURCE_DIR}
    )

    add_custom_command(
        TARGET tidy-upstream
        COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/${NAME}/${PREFIX}/build
            ${TIDY_SCRIPT} upstream ${SOURCE_DIR}
    )

    add_custom_command(
        TARGET tidy-${NAME}_${PREFIX}
        COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/${NAME}/${PREFIX}/build
            ${TIDY_SCRIPT} diff ${SOURCE_DIR}
    )

    add_custom_command(
        TARGET tidy-${NAME}_${PREFIX}-all
        COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/${NAME}/${PREFIX}/build
            ${TIDY_SCRIPT} all ${SOURCE_DIR}
    )

    add_custom_command(
        TARGET tidy-${NAME}_${PREFIX}-upstream
        COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/${NAME}/${PREFIX}/build
            ${TIDY_SCRIPT} upstream ${SOURCE_DIR}
    )
endfunction(add_tidy_targets)

# Private
#
function(add_format_targets NAME PREFIX SOURCE_DIR)
    if(PREFIX STREQUAL "vmm")
        set(PREFIX ${VMM_PREFIX})
    elseif(PREFIX STREQUAL "userspace")
        set(PREFIX ${USERSPACE_PREFIX})
    elseif(PREFIX STREQUAL "test")
        set(PREFIX ${TEST_PREFIX})
    endif()

    if(NOT EXISTS "${SOURCE_DIR}")
        return()
    endif()

    add_custom_command(
        TARGET format
        COMMAND ${ASTYLE_SCRIPT} ${USERSPACE_PREFIX_PATH}/bin/astyle diff ${SOURCE_DIR}
    )

    add_custom_command(
        TARGET format-all
        COMMAND ${ASTYLE_SCRIPT} ${USERSPACE_PREFIX_PATH}/bin/astyle all ${SOURCE_DIR}
    )

    add_custom_command(
        TARGET format-upstream
        COMMAND ${ASTYLE_SCRIPT} ${USERSPACE_PREFIX_PATH}/bin/astyle upstream ${SOURCE_DIR}
    )

    add_custom_command(
        TARGET format-${NAME}_${PREFIX}
        COMMAND ${ASTYLE_SCRIPT} ${USERSPACE_PREFIX_PATH}/bin/astyle diff ${SOURCE_DIR}
    )

    add_custom_command(
        TARGET format-${NAME}_${PREFIX}-all
        COMMAND ${ASTYLE_SCRIPT} ${USERSPACE_PREFIX_PATH}/bin/astyle all ${SOURCE_DIR}
    )

    add_custom_command(
        TARGET format-${NAME}_${PREFIX}-upstream
        COMMAND ${ASTYLE_SCRIPT} ${USERSPACE_PREFIX_PATH}/bin/astyle upstream ${SOURCE_DIR}
    )
endfunction(add_format_targets)

# Private
#
function(add_targets NAME PREFIX SOURCE_DIR)
    if(PREFIX STREQUAL "vmm")
        set(FULLPREFIX ${VMM_PREFIX})
    elseif(PREFIX STREQUAL "userspace")
        set(FULLPREFIX ${USERSPACE_PREFIX})
    elseif(PREFIX STREQUAL "test")
        set(FULLPREFIX ${TEST_PREFIX})
    elseif(PREFIX STREQUAL "none")
        set(FULLPREFIX ${PREFIX})
    endif()

    if(NOT PREFIX STREQUAL "none")
        add_custom_target(
            clean-${NAME}_${FULLPREFIX}
            COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${NAME}/${FULLPREFIX}
        )

        add_custom_command(
            TARGET clean-all
            COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${NAME}/${FULLPREFIX}
        )

        add_custom_command(
            TARGET clean-subprojects
            COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${NAME}/${FULLPREFIX}
        )

        add_custom_target(
            rebuild-${NAME}_${FULLPREFIX}
            COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${NAME}/${FULLPREFIX}
            COMMAND ${CMAKE_COMMAND} --build . --target ${NAME}_${FULLPREFIX}
        )

        if(ENABLE_TIDY)
            add_custom_target(tidy-${NAME}_${FULLPREFIX})
            add_custom_target(tidy-${NAME}_${FULLPREFIX}-all)
            add_custom_target(tidy-${NAME}_${FULLPREFIX}-upstream)
            add_tidy_targets(${NAME} ${PREFIX} ${SOURCE_DIR})
        endif()

        if(ENABLE_FORMAT)
            add_custom_target(format-${NAME}_${FULLPREFIX})
            add_custom_target(format-${NAME}_${FULLPREFIX}-all)
            add_custom_target(format-${NAME}_${FULLPREFIX}-upstream)
            add_format_targets(${NAME} ${PREFIX} ${SOURCE_DIR})
            add_format_targets(${NAME} ${PREFIX} ${SOURCE_DIR}/../include)
        endif()
    endif()

    if(PREFIX STREQUAL "test")
        add_custom_command(
            TARGET unittest
            COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/${NAME}/${FULLPREFIX}/build
            ctest -C Debug --output-on-failure
        )

        add_custom_target(
            unittest-${NAME}_${FULLPREFIX}
            COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/${NAME}/${FULLPREFIX}/build
            ctest -C Debug --output-on-failure
        )
    endif()
endfunction(add_targets)

# ------------------------------------------------------------------------------
# right_justify
# ------------------------------------------------------------------------------

# Private
#
function(right_justify text width output)
    set(str "")
    string(LENGTH "${text}" text_len)
    foreach(i RANGE ${text_len} ${width})
        set(str " ${str}")
    endforeach(i)
    set(${output} ${str} PARENT_SCOPE)
endfunction(right_justify)

# ------------------------------------------------------------------------------
# add_custom_target_category
# ------------------------------------------------------------------------------

# Private
#
function(add_custom_target_category TEXT)
    if(NOT WIN32)
        add_custom_command(
            TARGET info
            COMMAND ${CMAKE_COMMAND} -E cmake_echo_color " "
            COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green "${TEXT}:"
        )
    endif()
endfunction(add_custom_target_category)

# ------------------------------------------------------------------------------
# add_custom_target_info
# ------------------------------------------------------------------------------

# Private
#
function(add_custom_target_info)
    if(NOT WIN32)
        set(oneVal TARGET COMMENT)
        cmake_parse_arguments(ARG "" "${oneVal}" "" ${ARGN})

        if(NOT_ARG_TARGET)
            right_justify("${BUILD_COMMAND}" 20 JUSTIFY_STR)
            add_custom_command(
                TARGET info
                COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --yellow --no-newline "    ${BUILD_COMMAND}"
                COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red --no-newline "${JUSTIFY_STR}- "
                COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --white "${ARG_COMMENT}"
            )
        else()
            right_justify("${BUILD_COMMAND} ${ARG_TARGET}" 20 JUSTIFY_STR)
            add_custom_command(
                TARGET info
                COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --yellow --no-newline "    ${BUILD_COMMAND} ${ARG_TARGET}"
                COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red --no-newline "${JUSTIFY_STR}- "
                COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --white "${ARG_COMMENT}"
            )
        endif()
    endif()
endfunction(add_custom_target_info)

# ------------------------------------------------------------------------------
# add_subproject
# ------------------------------------------------------------------------------

# Add Sub Project
#
# Adds a Bareflank specific project to the build. Unlike dependencies,
# sub projects are checked for changes. This function is not only used
# internally by the main build system, but can also be used by extensions
# for adding additional logic to the hypervisor.
#
# @param SOURCE_DIR the path to the project's CMakeLists.txt.
# @param TOOLCHAIN the path to the toolchain file to use.
# @param DEPENDS superbuild-level dependencies of the project.
#
function(add_subproject NAME PREFIX)
    set(oneVal SOURCE_DIR TOOLCHAIN)
    set(multiVal DEPENDS)
    cmake_parse_arguments(ARG "" "${oneVal}" "${multiVal}" ${ARGN})

    if(PREFIX STREQUAL "vmm" AND NOT ENABLE_BUILD_VMM AND NOT ENABLE_BUILD_TEST)
        return()
    endif()

    if(PREFIX STREQUAL "userspace" AND NOT ENABLE_BUILD_USERSPACE)
        return()
    endif()

    if(PREFIX STREQUAL "test" AND NOT ENABLE_BUILD_TEST)
        return()
    endif()

    if(PREFIX STREQUAL "efi" AND NOT ENABLE_BUILD_EFI)
        return()
    endif()

    if(ARG_SOURCE_DIR)
        set(SOURCE_DIR ${ARG_SOURCE_DIR})
    else()
        set(SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/${NAME})
    endif()

    set(SHORT_PREFIX ${PREFIX})
    if(NOT PREFIX STREQUAL "efi" AND NOT ${NAME} STREQUAL "bfroot")
        add_targets(${NAME} ${PREFIX} ${SOURCE_DIR})
    endif()

    if(NOT ARG_TOOLCHAIN)
        if(PREFIX STREQUAL "vmm")
            set(TOOLCHAIN ${VMM_TOOLCHAIN_PATH})
        elseif(PREFIX STREQUAL "userspace")
            set(TOOLCHAIN ${USERSPACE_TOOLCHAIN_PATH})
        elseif(PREFIX STREQUAL "test")
            set(TOOLCHAIN ${TEST_TOOLCHAIN_PATH})
        elseif(PREFIX STREQUAL "efi")
            set(TOOLCHAIN ${EFI_TOOLCHAIN_PATH})
        else()
            message(FATAL_ERROR "Invalid prefix: ${PREFIX}")
        endif()
    else()
        set(TOOLCHAIN ${ARG_TOOLCHAIN})
    endif()

    if(PREFIX STREQUAL "vmm")
        set(PREFIX ${VMM_PREFIX})
    elseif(PREFIX STREQUAL "userspace")
        set(PREFIX ${USERSPACE_PREFIX})
    elseif(PREFIX STREQUAL "test")
        set(PREFIX ${TEST_PREFIX})
    elseif(PREFIX STREQUAL "efi")
        set(PREFIX ${EFI_PREFIX})
    else()
        message(FATAL_ERROR "Invalid prefix: ${PREFIX}")
    endif()

    foreach(d ${ARG_DEPENDS})
        if(d MATCHES ${VMM_PREFIX})
            list(APPEND DEPENDS "${d}")
        elseif(d MATCHES ${USERSPACE_PREFIX})
            list(APPEND DEPENDS "${d}")
        elseif(d MATCHES ${TEST_PREFIX})
            list(APPEND DEPENDS "${d}")
        elseif(d MATCHES ${EFI_PREFIX})
            list(APPEND DEPENDS "${d}")
        else()
            list(APPEND DEPENDS "${d}_${PREFIX}")
        endif()
    endforeach(d)

    get_cmake_property(_vars CACHE_VARIABLES)
    foreach (_var ${_vars})
        STRING(REGEX MATCH "^CMAKE" is_cmake_var ${_var})
        if(NOT is_cmake_var)
            list(APPEND CMAKE_ARGS -D${_var}=${${_var}})
        endif()
    endforeach()

    list(APPEND CMAKE_ARGS
        -DCMAKE_EXPORT_COMPILE_COMMANDS=${CMAKE_EXPORT_COMPILE_COMMANDS}
        -DCMAKE_INSTALL_MESSAGE=${CMAKE_INSTALL_MESSAGE}
        -DCMAKE_INSTALL_PREFIX=${PREFIXES_DIR}/${PREFIX}
        -DCMAKE_PREFIX_PATH=${EXPORT_DIR}
        -DCMAKE_PROJECT_${NAME}_INCLUDE=${SOURCE_CMAKE_DIR}/project.cmake
        -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN}
        -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE}
        -DPROJECT_INCLUDE_LIST=${PROJECT_INCLUDE_LIST}
        -DPKG_FILE=${PKG_FILE}
        -DBFM_VMM=${BFM_VMM}
        -DEFI_EXTENSION_SOURCES=${EFI_EXTENSION_SOURCES}
    )

    if(NOT WIN32 AND NOT CMAKE_GENERATOR STREQUAL "Ninja")
        list(APPEND CMAKE_ARGS
            -DCMAKE_TARGET_MESSAGES=${CMAKE_TARGET_MESSAGES}
        )
    endif()
    if(NOT WIN32)
        list(APPEND CMAKE_ARGS
            -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
        )
    endif()

    ExternalProject_Add(
        ${NAME}_${PREFIX}
        ${EPA_ARGS}
        PREFIX          ${CMAKE_BINARY_DIR}/${NAME}/${PREFIX}
        STAMP_DIR       ${CMAKE_BINARY_DIR}/${NAME}/${PREFIX}/stamp
        TMP_DIR         ${CMAKE_BINARY_DIR}/${NAME}/${PREFIX}/tmp
        BINARY_DIR      ${CMAKE_BINARY_DIR}/${NAME}/${PREFIX}/build
        SOURCE_DIR      ${SOURCE_DIR}
        CMAKE_ARGS      ${CMAKE_ARGS}
        DEPENDS         ${DEPENDS}
        UPDATE_COMMAND  ${CMAKE_COMMAND} -E echo "-- checking for updates"
    )

    ExternalProject_Add_Step(
        ${NAME}_${PREFIX}
        ${NAME}_${PREFIX}_cleanup
        COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${NAME}/${PREFIX}/src
        DEPENDEES configure
    )

    ExternalProject_Add_Step(
        ${NAME}_${PREFIX}
        ${NAME}_${PREFIX}_package
        COMMAND ${CMAKE_COMMAND}
            -DPKG_FILE=${PKG_FILE} -DPKG=${NAME}-${SHORT_PREFIX}
            -P ${SOURCE_CMAKE_DIR}/append.cmake
        DEPENDEES install
    )
endfunction(add_subproject)

# ------------------------------------------------------------------------------
# init_project
# ------------------------------------------------------------------------------

# Private
#
macro(enable_asm PREFIX)
    if(${BUILD_TARGET_ARCH} STREQUAL "x86_64")
        find_program(NASM_BIN nasm)

        if(NOT NASM_BIN)
            set(NASM_BIN "c:\\Program Files\\NASM\\nasm.exe")
            if(NOT EXISTS ${NASM_BIN})
                message(FATAL_ERROR "Unable to find nasm, or nasm is not installed")
            endif()
        endif()

        execute_process(COMMAND ${NASM_BIN} -v OUTPUT_VARIABLE NASM_ID OUTPUT_STRIP_TRAILING_WHITESPACE)
        set(CMAKE_ASM_NASM_COMPILER_ID ${NASM_ID})

        if(PREFIX STREQUAL "vmm")
            set(CMAKE_ASM_NASM_OBJECT_FORMAT "elf64")
        else()
            if(HOST_FORMAT_TYPE STREQUAL "pe")
                set(CMAKE_ASM_NASM_OBJECT_FORMAT "win64")
            endif()
            if(HOST_FORMAT_TYPE STREQUAL "elf")
                set(CMAKE_ASM_NASM_OBJECT_FORMAT "elf64")
            endif()
        endif()

        enable_language(ASM_NASM)

        if(PREFIX STREQUAL "vmm")
            set(CMAKE_ASM_NASM_FLAGS "-d ${PREFIX} -d ${OSTYPE} -d SYSV")
        else()
            set(CMAKE_ASM_NASM_FLAGS "-d ${PREFIX} -d ${OSTYPE} -d ${ABITYPE}")
        endif()

        set(CMAKE_ASM_NASM_CREATE_STATIC_LIBRARY TRUE)
    endif()
    if(${BUILD_TARGET_ARCH} STREQUAL "aarch64")
        message(WARNING "unimplemented")
    endif()
endmacro(enable_asm)

# Init Project
#
# Initializes a subproject or extension.
#
# @param TARGET the name of the project target to create
# @param INTERFACE make TARGET an interface library
# @param BINARY make TARGET an executable
#
macro(init_project TARGET)
    set(options INTERFACE BINARY)
    cmake_parse_arguments(ARG "${options}" "" "" ${ARGN})

    set(CMAKE_C_EXTENSIONS OFF)
    set(CMAKE_CXX_EXTENSIONS OFF)

    enable_asm(${PREFIX})

    if(${ARG_INTERFACE})
        add_library(${TARGET} INTERFACE)
        add_library(${PREFIX}::${TARGET} ALIAS ${TARGET})
        set(INTERFACE TRUE)
    elseif(NOT ${ARG_BINARY})
        add_library(${TARGET} STATIC)
        add_library(${PREFIX}::${TARGET} ALIAS ${TARGET})
        set_target_properties(${TARGET} PROPERTIES LINKER_LANGUAGE C)
    else()
        add_executable(${TARGET})
        add_executable(${PREFIX}::${TARGET} ALIAS ${TARGET})
        set_target_properties(${TARGET} PROPERTIES LINKER_LANGUAGE C)
        set(BINARY TRUE)
    endif()

    if(PREFIX STREQUAL "vmm")
        set(CMAKE_SKIP_RPATH TRUE)
    endif()

    if(PREFIX STREQUAL "test")
        set(ENABLE_MOCKING ON)
        set(CMAKE_BUILD_TYPE "Debug")
    endif()

    get_cmake_property(_vars CACHE_VARIABLES)
    foreach (_var ${_vars})
        set(${_var} ${${_var}})
    endforeach()
endmacro(init_project)

# Fini Project
#
macro(fini_project)
    set(PROJECT ${CMAKE_PROJECT_NAME})
    set(EXPORT ${PROJECT}-${PREFIX}-targets)

    if(NOT BINARY)
        install(TARGETS ${PROJECT} DESTINATION lib EXPORT ${EXPORT})
    else()
        install(TARGETS ${PROJECT} DESTINATION bin EXPORT ${EXPORT})
    endif()

    install(EXPORT ${EXPORT} DESTINATION ${EXPORT_DIR} NAMESPACE ${PREFIX}::)
    configure_file(
        ${SOURCE_CMAKE_DIR}/package.cmake.in
        ${EXPORT_DIR}/${PROJECT}-${PREFIX}-config.cmake
        @ONLY
    )
endmacro(fini_project)

# ------------------------------------------------------------------------------
# validate_build / invalid_config
# ------------------------------------------------------------------------------

# Private
#
function(validate_build)
    if(BUILD_VALIDATOR_ERROR)
        message(FATAL_ERROR "Build validation failed")
    endif()
endfunction(validate_build)

# Invalidate Config
#
# Use this function to invalidate the configuration of the build. Unlike
# message(FATAL_ERROR), this function will queue up errors, and exit when
# the build is validated ensuring all errors are reported at once.
#
# @param MSG the message to report on error
#
macro(invalid_config MSG)
    message(SEND_ERROR "${MSG}")
    set(BUILD_VALIDATOR_ERROR ON)
endmacro(invalid_config)

# ------------------------------------------------------------------------------
# do_test
# ------------------------------------------------------------------------------

# Do Test
#
# Adds a unit test.
#
# @param FILEPATH the file name of the test.
# @param DEFINES Additional definitions for the test
# @param DEPENDS Additional dependencies for the test.
# @param SOURCES The source files to use for the test. If this is not defined,
#     the file used is ${FILEPATH}.cpp. This is only needed if the test file
#     is not in the same directory, allowing you to pass a source file with
#     a directory. Nomrally FILEPATH should still match the filename being
#     used.
#
function(do_test FILEPATH)
    set(multiVal DEFINES DEPENDS SOURCES CMD_LINE_ARGS)
    cmake_parse_arguments(ARG "" "" "${multiVal}" ${ARGN})

    if(NOT ARG_SOURCES)
        set(ARG_SOURCES "${FILEPATH}")
    endif()

    get_filename_component(TEST_NAME "${FILEPATH}" NAME_WE)
    string(REPLACE "test_" "" NAME "${TEST_NAME}")

    add_executable(test_${NAME})
    target_sources(test_${NAME} PRIVATE ${ARG_SOURCES})
    target_link_libraries(test_${NAME} PRIVATE ${ARG_DEPENDS} ${CMAKE_PROJECT_NAME})
    target_compile_definitions(test_${NAME} PRIVATE ${ARG_DEFINES})
    add_test(NAME test_${NAME} COMMAND test_${NAME} ${ARG_CMD_LINE_ARGS})
endfunction(do_test)

# ------------------------------------------------------------------------------
# print_xxx
# ------------------------------------------------------------------------------

# Private
#
function(print_banner)
    message(STATUS "${BoldMagenta}  ___                __ _           _   ${ColorReset}")
    message(STATUS "${BoldMagenta} | _ ) __ _ _ _ ___ / _| |__ _ _ _ | |__${ColorReset}")
    message(STATUS "${BoldMagenta} | _ \\/ _` | '_/ -_)  _| / _` | ' \\| / /${ColorReset}")
    message(STATUS "${BoldMagenta} |___/\\__,_|_| \\___|_| |_\\__,_|_||_|_\\_\\${ColorReset}")
    message(STATUS "")
    message(STATUS "${Green} Please give us a star on: ${White}https://github.com/Bareflank/hypervisor${ColorReset}")
    message(STATUS "")
endfunction(print_banner)

# Private
#
function(print_usage)
    message(STATUS "${Green} Bareflank is ready to build, usage:${ColorReset}")
    message(STATUS "${Yellow}    ${BUILD_COMMAND}${ColorReset}")
    message(STATUS "")

    if(NOT WIN32)
        message(STATUS "${Green} For more build options:${ColorReset}")
        message(STATUS "${Yellow}    ${BUILD_COMMAND} info${ColorReset}")
        message(STATUS "")
    else()
        message(STATUS "${Green} Additional build options:${ColorReset}")
        message(STATUS "${Yellow}    cmake --build . --target unittest${ColorReset}")
        message(STATUS "${Yellow}    cmake --build . --target clean-all${ColorReset}")
        message(STATUS "")
    endif()
endfunction(print_usage)

# ------------------------------------------------------------------------------
# Helpers
# ------------------------------------------------------------------------------

function(git_dir_script)
    if(NOT UNIX)
        return()
    endif()
    if(NOT EXISTS "${BUILD_ROOT_DIR}/setup_git_dir.sh")
        file(APPEND "${BUILD_ROOT_DIR}/setup_git_dir.sh" "export GIT_WORK_TREE=${SOURCE_ROOT_DIR}\n")
        file(APPEND "${BUILD_ROOT_DIR}/setup_git_dir.sh" "export GIT_DIR=${SOURCE_ROOT_DIR}/.git\n")
        execute_process(COMMAND chmod +x ${BUILD_ROOT_DIR}/setup_git_dir.sh)
    endif()
endfunction()

redpajama_set_name: RedPajamaGithub


text:
I don't like this association one bit
I came across this article in Rolling Stone this morning (http://www.rollingstone.com/culture/news/heil-hipster-the-young-neo-nazis-trying-to-put-a-stylish-face-on-hate-20140623). The article explains how Germany's neo-Nazis are using social media and appropriating popular hipster culture to spread their warped propaganda.
Over the past year, partly because of leaders like Schroeder and partly because of the unstoppable globalization of youth culture, the hipsterification of the German neo-Nazi scene has begun to gain steam. This winter, the German media came up with a new term, "nipster," to describe the trend of people dressing like Brooklyn hipsters at Nazi events. Experts have noted that the German neo-Nazi presence on Tumblr and other social networking sites has become sleeker and more sophisticated. Neo-Nazi clothing has become more stylish and difficult to recognize. There's even a vegan Nazi cooking show. "If the definition of the nipster is someone who can live in the mainstream," Schroeder explains, "then I see it as the future of the movement."
Read more: http://www.rollingstone.com/culture/news/heil-hipster-the-young-neo-nazis-trying-to-put-a-stylish-face-on-hate-20140623#ixzz36mtefj89
Follow us: @rollingstone on Twitter | RollingStone on Facebook
And then I came across this:
And now another American export has arrived: In 2012, the daily Welt heralded the "hipster" as Germany's "new object of hate" and just this February, the country's biggest tabloid, Bild, offered a guide to "hipster types" for its readers. (Example: "The fixed-gear fanatic never goes anywhere without his bike.")
Read more: http://www.rollingstone.com/culture/news/heil-hipster-the-young-neo-nazis-trying-to-put-a-stylish-face-on-hate-20140623#ixzz36moREwbV
So in Germany, riding a fixed-gear bike is akin to being a neo-Nazi. Jeesh, I don't think so.
The association of conservatives with fascism and Naziism is extremely irksome. It's absolutely false but has been used by leftists to smear us for years. Luckily, the "conservative=fascist, Nazi" lie has been put to rest. In his book Liberal Fascism (http://www.amazon.ca/Liberal-Fascism-American-Mussolini-Politics/dp/0767917189), Jonah Goldberg explains why. Here's an excerpt from the book description:
Liberal Fascism offers a startling new perspective on the theories and practices that define fascist politics. Replacing conveniently manufactured myths with surprising and enlightening research, Jonah Goldberg reminds us that the original fascists were really on the left, and that liberals from Woodrow Wilson to FDR to Hillary Clinton have advocated policies and principles remarkably similar to those of Hitler's National Socialism and Mussolini's Fascism.
Contrary to what most people think, the Nazis were ardent socialists (hence the term "National socialism"). They believed in free health care and guaranteed jobs. They confiscated inherited wealth and spent vast sums on public education. They purged the church from public policy, promoted a new form of pagan spirituality, and inserted the authority of the state into every nook and cranny of daily life. The Nazis declared war on smoking, supported abortion, euthanasia, and gun control. They loathed the free market, provided generous pensions for the elderly, and maintained a strict racial quota system in their universities—where campus speech codes were all the rage. The Nazis led the world in organic farming and alternative medicine. Hitler was a strict vegetarian, and Himmler was an animal rights activist.
Do these striking parallels mean that today's liberals are genocidal maniacs, intent on conquering the world and imposing a new racial order? Not at all. Yet it is hard to deny that modern progressivism and classical fascism shared the same intellectual roots. We often forget, for example, that Mussolini and Hitler had many admirers in the United States. W.E.B. Du Bois was inspired by Hitler's Germany, and Irving Berlin praised Mussolini in song. Many fascist tenets were espoused by American progressives like John Dewey and Woodrow Wilson, and FDR incorporated fascist policies in the New Deal.
Fascism was an international movement that appeared in different forms in different countries, depending on the vagaries of national culture and temperament. In Germany, fascism appeared as genocidal racist nationalism. In America, it took a "friendlier," more liberal form. The modern heirs of this "friendly fascist" tradition include the New York Times, the Democratic Party, the Ivy League professoriate, and the liberals of Hollywood. The quintessential Liberal Fascist isn't an SS storm trooper; it is a female grade school teacher with an education degree from Brown or Swarthmore.
James Delingpole reviewed the book for The Spectator in 2009 (http://www.spectator.co.uk/features/3387736/liberals-are-the-true-heirs-of-the-nazi-spirit/):
Jonah Goldberg's Liberal Fascism is a conservative's wet dream. No, it's better than that. The moment you read it — presuming you're right-wing, that is — you will experience not only a rush of ecstasy, but also a surge of revolutionary fervour and evangelical zeal. You'll want to email all your friends and tell them the wonderful news: 'I'm not an evil bastard, after all!'
What Goldberg very effectively does is to remove from the charge sheet the one possible reason any thinking person could have for not wanting to be right-wing: viz, that being on the right automatically makes you a closet fascist/Nazi scumbag. By accumulating a mass of historical evidence so extensive it borders on the wearisome, Goldberg comprehensively demonstrates that both Nazism and fascism were phenomena of the Left, not of the Right.
The book, a New York Times No. 1 bestseller has, needless to say, enraged lefties ('liberals' as they're more usually known in the States) everywhere. 'In the first week I had half a dozen emails from total strangers saying, "How dare you accuse us caring liberals of being fascists!" and then going on to say what a shame it was that my family hadn't been sorted out once and for all a few years back in the concentration camps,' he says.
A comment on the Delingpole article by Kevin is also insightful:
One thing that unites Marxists, Nazis and Liberals is their belief in historical progress. The Marxists put their faith in a predicted worldwide proletarian revolution. What happened instead was a great war infused with the spirit of patriotism. The Nazis picked up on that and put their faith in the nation. When they lost, the Liberals put their faith in opposing the nation. Now that they are losing the jihad, the next stage for the Left is to put its faith in Allah.
Another thing that unites Marxists, Nazis and Liberals is that they hate Catholicism.
So, if you are a conservative and someone calls you a fascist or a Nazi, just direct them to theconservativecyclsit.com for a history lesson.
Posted in conservatism and tagged fixed, liberalism, Marxism, Nazis, socialism, The conservative cyclist on July 7, 2014 by the conservative cyclist. Leave a comment
← What we have to put up with sometimes
Articles & Posts to read today →


text:
Gold Price $1852.41 +11.64
Atico reports 1.58 Mt at 4.45 % Cu and 3.17 g/t Au Inferred Mineral Resources at El Roble Mine, Colombia
Vancouver, June 26, 2013 - Atico Mining Corporation (TSX.V: ATY | OTC: ATCMF) is pleased to announce that an initial NI 43-101 mineral resource estimate for its El Roble project has established an inferred mineral resource of 1.58 million tonnes at 4.45 % Cu and 3.17 g/t Au using a cut-off grade of 0.72 % Cu Eq. All of these announced resources occur at depth below the existing El Roble mine workings. In the coming months, Atico will continue to further drill test the extensions of the defined inferred mineral resources at depth and strike, as well as other prospective areas.
Fernando E. Ganoza, CEO, commented: "We are extremely pleased with the outcome of our initial mineral resource estimate for El Roble mine. The grades continue to be remarkable at depth and the volume is very encouraging given the deposit is still open at depth and along strike." Mr. Ganoza added, "The resource estimate, along with the recently completed engineering studies and assessment of current operations, support Atico's plan to exercise the option agreement this year and quickly bring newly discovered resources into production using the existing operating mine and mill infrastructure."
The resource estimate was prepared in accordance with the definitions in the Canadian National Instrument 43-101 and based on data from 30 drill holes totaling 6,084 meters completed by Atico, during 2012 and up to February 20, 2013. An additional 33 drill holes totaling 1,784 meters completed by Minera El Roble (MINER), current operator of the mine and independently reviewed, logged and sampled by Atico were also included. Mr. Michael Lechner and Mr. Donald Earnest have acted as independent qualified persons, as defined by the Canadian National Instrument 43 -- 101 and have reviewed and approved the resource estimate.
Inferred Resource Estimate Table
Contained Metal
Cu Eq
Cutoff (%)
(g/t)
Cu Lbs
Au oz
Cu Eq Lbs
0.5 1,627 6.19 4.33 3.10 11.10 155,420 162 221,968
0.72 1,581 6.35 4.45 3.17 11.30 155,090 161 221,267
Note: Copper equivalency estimates were derived using metal prices of US$ 3.59/lb for Copper and US$ 1472/oz for gold
Resource Estimate Methodology
Data obtained from the Atico diamond drill program were used to construct three-dimensional geometric wireframes representing the massive sulfide zones extending below the 2000 level in the El Roble mine. These zones (named Maximus, Goliath, Apolo, Andromeda, Orion, Transformador, Zeus, Aquiles, and Ares) were used to constrain the estimation of an NI 43-101 compliant inferred resource at El Roble mine. Copper, gold, silver, lead, zinc and cobalt grades were estimated for 5m x 5m x 5m blocks within the wireframes. Prior to estimation of the block grades, copper grades were capped at 20% Cu, gold was capped at 20g/t Au and silver was capped at 100g/t Ag. A three-pass inverse distance cubed (1/d3) method was used for the block grade estimates, along a trend plane having an azimuth of 320 degrees and a minus 75-degree dip to the north. The first pass used search distances along strike and down dip of 25m, and 5m perpendicular to the trend plane. The second pass used search distances along strike and down dip of 75m, and 10m perpendicular to the trend plane. The third pass used search distances along strike and down dip of 150m, and 20m perpendicular to the trend plane. The first pass required a minimum of one composite and allowed a maximum of three composites, with no more than one composite per drill hole. The second pass required a minimum of three composites and allowed a maximum of six composites, with a limit of two composites per drill hole, while the third pass required a minimum of three composites, a maximum of eight composites allowed and a limit of two composites per drill hole. The first pass resulted in grade estimates for 56 percent of the blocks. The second pass resulted in 26 percent of the blocks receiving grade estimates, while the third pass resulted in grade estimates for the remaining 18 percent of the blocks.
In the opinion of Atico and its Qualified Persons, the methodology used is appropriate and provides a reasonable estimate of the copper and gold content of inferred mineral resources for the El Roble deposit that conform to NI 43-101 guidelines. The wireframes interpreted by Atico as part of the estimation process provide an excellent guide for the planned in-fill drilling and other work required to estimate measured and indicated mineral resources and an eventual mineral reserve estimate.
A NI 43-101 technical report will be filed on www.sedar.com and posted on the company's website within 45 days of this news release.
El Roble drill program and exploration update
On-going underground drilling at El Roble mine is currently focused on further defining the interpreted boundaries of the Maximus and Goliath massive sulfide bodies, which are considered primary targets for mining operations below the 2000 level given their close proximity to current mine workings. Nine drill holes have been planned for this purpose and are scheduled to be completed in early July. The underground program will continue at the south end of the known mineralized strike length and below the 2000 level, with the goal of discovering additional massive sulfide bodies.
Drilling at El Roble mine was interrupted in April (see news releases dated April 15, 2013 and April 23, 2013) with news flow further delayed in May due to consecutive failure of holes 31a, 31b and 32 caused by ground conditions. The company expects the drilling results news flow will resume in early July.
The company recently completed 1,329 meters of drilling in 4 drill holes at the Archie area. Drill results have confirmed strong continuity of the favorable black chert formation to the north of El Roble mine with presence of chalcopyrite and pyrite stringers up to 5 cm in length, but massive sulphide mineralization was not intercepted. The company is evaluating the results from the Archie area and conducting additional interpretation of the zone. The drill program at Archie will be revised as a result of the enhanced understanding of the area.
Target preparation work has been completed at Santa Anita anomaly with 8 drill targets defined within this area. Work in the San Lorenzo prospective target has begun and includes in-fill geochemical sampling, structural interpretation, detailed geological mapping and interpretation of geophysical anomalies. In addition, surface soil and rock geochemistry and geology work continues in newly identified as well as known target areas to better understand and prioritize drilling targets.
El Roble operation assessment update
In the first quarter of 2013, the company initiated a comprehensive assessment of the El Roble mine operation through technical and engineering studies aimed at gaining a thorough understanding of the existing mining operation. Studies produced by engineering firms and independent consultants have assessed the potential to scale up the mill and processing facilities, the mine's design and optimization, the tailings dam expansion and the operation's environmental standards.
As part of this assessment, the company has validated the location and upgraded the design of a new adit at the 1886 level, 114 meters below current mine workings. The adit will provide access to new resources and allow building of an underground drill platform from which diamond drilling can intercept the newly discovered massive sulphide bodies perpendicular to their strike direction, which the company believes is necessary to estimate measured and indicated resources and, eventually, a mineral reserve estimate.
Michael J. Lechner of Resource Modeling Inc. and Donald F. Earnest of Resource Evaluation Inc. are the Qualified Persons as defined by National Instrument 43-101 and are responsible for the accuracy of the technical information in this news release regarding the resource estimate.
Dr. Demetrius Pohl, Ph.D., AIPG Certified Geologist, a qualified person under NI 43-101 standards, and independent of the company is responsible for ensuring that the information contained in this news release not related to the resource estimate is an accurate summary of the original reports and data provided to or developed by Atico Mining Corporation.
The El Roble Property
The El Roble property is the site of an operating underground copper and gold mine with nominal capacity of 400 tonnes per day. Over the past 22 years the mine has processed 1.5 million tonnes of ore at an average grade of 2.5% copper and an estimated 2.5 g/t gold. Copper and gold mineralization at El Roble occurs as volcanogenic massive sulfide ("VMS") lenses. Atico's underground drilling has discovered additional high-grade mineralization below the mine workings. Exploration on the surrounding 6,679 ha property over the past two years has defined a productive contact and an enclosing package of host rocks that extend 10 kilometers across the property. The entire strike length is marked by ("VMS") mineralization occurrence indicators.
About Atico Mining Corporation
Atico is a growth oriented, copper and gold exploration and development company focused on mining opportunities in Latin America. The company's primary property is the El Roble project. The company is selectively pursuing additional acquisition opportunities. For more information, please visit our website at www.aticomining.com.
Fernando E. Ganoza
Atico Mining Corporation
Trading symbols: TSX.V: ATY | OTC: ATCMF
Igor Dutina
No securities regulatory authority has either approved or disapproved of the contents of this news release. The securities being offered have not been, and will not be, registered under the United States Securities Act of 1933, as amended (the ''U.S. Securities Act''), or any state securities laws, and may not be offered or sold in the United States, or to, or for the account or benefit of, a "U.S. person" (as defined in Regulation S of the U.S. Securities Act) unless pursuant to an exemption therefrom. This press release is for information purposes only and does not constitute an offer to sell or a solicitation of an offer to buy any securities of the Company in any jurisdiction.
Cautionary Note Regarding Forward Looking Statements
This announcement includes certain "forward-looking statements" within the meaning of Canadian securities legislation. All statements, other than statements of historical fact, included herein, without limitation the use of net proceeds, are forward-looking statements. Forward- looking statements involve various risks and uncertainties and are based on certain factors and assumptions. There can be no assurance that such statements will prove to be accurate, and actual results and future events could differ materially from those anticipated in such statements. Important factors that could cause actual results to differ materially from the Company's expectations include uncertainties relating to interpretation of drill results and the geology, continuity and grade of mineral deposits; uncertainty of estimates of capital and operating costs; the need to obtain additional financing to maintain its interest in and/or explore and develop the Company's mineral projects; uncertainty of meeting anticipated program milestones for the Company's mineral projects; and other risks and uncertainties disclosed under the heading "Risk Factors" in the prospectus of the Company dated March 2, 2012 filed with the Canadian securities regulatory authorities on the SEDAR website at www.sedar.com